builtin / receive-pack.con commit checkout: fix memory leak (443a12f)
   1#include "builtin.h"
   2#include "lockfile.h"
   3#include "pack.h"
   4#include "refs.h"
   5#include "pkt-line.h"
   6#include "sideband.h"
   7#include "run-command.h"
   8#include "exec_cmd.h"
   9#include "commit.h"
  10#include "object.h"
  11#include "remote.h"
  12#include "connect.h"
  13#include "transport.h"
  14#include "string-list.h"
  15#include "sha1-array.h"
  16#include "connected.h"
  17#include "argv-array.h"
  18#include "version.h"
  19#include "tag.h"
  20#include "gpg-interface.h"
  21#include "sigchain.h"
  22#include "fsck.h"
  23#include "tmp-objdir.h"
  24#include "oidset.h"
  25
  26static const char * const receive_pack_usage[] = {
  27        N_("git receive-pack <git-dir>"),
  28        NULL
  29};
  30
  31enum deny_action {
  32        DENY_UNCONFIGURED,
  33        DENY_IGNORE,
  34        DENY_WARN,
  35        DENY_REFUSE,
  36        DENY_UPDATE_INSTEAD
  37};
  38
  39static int deny_deletes;
  40static int deny_non_fast_forwards;
  41static enum deny_action deny_current_branch = DENY_UNCONFIGURED;
  42static enum deny_action deny_delete_current = DENY_UNCONFIGURED;
  43static int receive_fsck_objects = -1;
  44static int transfer_fsck_objects = -1;
  45static struct strbuf fsck_msg_types = STRBUF_INIT;
  46static int receive_unpack_limit = -1;
  47static int transfer_unpack_limit = -1;
  48static int advertise_atomic_push = 1;
  49static int advertise_push_options;
  50static int unpack_limit = 100;
  51static off_t max_input_size;
  52static int report_status;
  53static int use_sideband;
  54static int use_atomic;
  55static int use_push_options;
  56static int quiet;
  57static int prefer_ofs_delta = 1;
  58static int auto_update_server_info;
  59static int auto_gc = 1;
  60static int reject_thin;
  61static int stateless_rpc;
  62static const char *service_dir;
  63static const char *head_name;
  64static void *head_name_to_free;
  65static int sent_capabilities;
  66static int shallow_update;
  67static const char *alt_shallow_file;
  68static struct strbuf push_cert = STRBUF_INIT;
  69static unsigned char push_cert_sha1[20];
  70static struct signature_check sigcheck;
  71static const char *push_cert_nonce;
  72static const char *cert_nonce_seed;
  73
  74static const char *NONCE_UNSOLICITED = "UNSOLICITED";
  75static const char *NONCE_BAD = "BAD";
  76static const char *NONCE_MISSING = "MISSING";
  77static const char *NONCE_OK = "OK";
  78static const char *NONCE_SLOP = "SLOP";
  79static const char *nonce_status;
  80static long nonce_stamp_slop;
  81static unsigned long nonce_stamp_slop_limit;
  82static struct ref_transaction *transaction;
  83
  84static enum {
  85        KEEPALIVE_NEVER = 0,
  86        KEEPALIVE_AFTER_NUL,
  87        KEEPALIVE_ALWAYS
  88} use_keepalive;
  89static int keepalive_in_sec = 5;
  90
  91static struct tmp_objdir *tmp_objdir;
  92
  93static enum deny_action parse_deny_action(const char *var, const char *value)
  94{
  95        if (value) {
  96                if (!strcasecmp(value, "ignore"))
  97                        return DENY_IGNORE;
  98                if (!strcasecmp(value, "warn"))
  99                        return DENY_WARN;
 100                if (!strcasecmp(value, "refuse"))
 101                        return DENY_REFUSE;
 102                if (!strcasecmp(value, "updateinstead"))
 103                        return DENY_UPDATE_INSTEAD;
 104        }
 105        if (git_config_bool(var, value))
 106                return DENY_REFUSE;
 107        return DENY_IGNORE;
 108}
 109
 110static int receive_pack_config(const char *var, const char *value, void *cb)
 111{
 112        int status = parse_hide_refs_config(var, value, "receive");
 113
 114        if (status)
 115                return status;
 116
 117        if (strcmp(var, "receive.denydeletes") == 0) {
 118                deny_deletes = git_config_bool(var, value);
 119                return 0;
 120        }
 121
 122        if (strcmp(var, "receive.denynonfastforwards") == 0) {
 123                deny_non_fast_forwards = git_config_bool(var, value);
 124                return 0;
 125        }
 126
 127        if (strcmp(var, "receive.unpacklimit") == 0) {
 128                receive_unpack_limit = git_config_int(var, value);
 129                return 0;
 130        }
 131
 132        if (strcmp(var, "transfer.unpacklimit") == 0) {
 133                transfer_unpack_limit = git_config_int(var, value);
 134                return 0;
 135        }
 136
 137        if (strcmp(var, "receive.fsck.skiplist") == 0) {
 138                const char *path;
 139
 140                if (git_config_pathname(&path, var, value))
 141                        return 1;
 142                strbuf_addf(&fsck_msg_types, "%cskiplist=%s",
 143                        fsck_msg_types.len ? ',' : '=', path);
 144                free((char *)path);
 145                return 0;
 146        }
 147
 148        if (skip_prefix(var, "receive.fsck.", &var)) {
 149                if (is_valid_msg_type(var, value))
 150                        strbuf_addf(&fsck_msg_types, "%c%s=%s",
 151                                fsck_msg_types.len ? ',' : '=', var, value);
 152                else
 153                        warning("Skipping unknown msg id '%s'", var);
 154                return 0;
 155        }
 156
 157        if (strcmp(var, "receive.fsckobjects") == 0) {
 158                receive_fsck_objects = git_config_bool(var, value);
 159                return 0;
 160        }
 161
 162        if (strcmp(var, "transfer.fsckobjects") == 0) {
 163                transfer_fsck_objects = git_config_bool(var, value);
 164                return 0;
 165        }
 166
 167        if (!strcmp(var, "receive.denycurrentbranch")) {
 168                deny_current_branch = parse_deny_action(var, value);
 169                return 0;
 170        }
 171
 172        if (strcmp(var, "receive.denydeletecurrent") == 0) {
 173                deny_delete_current = parse_deny_action(var, value);
 174                return 0;
 175        }
 176
 177        if (strcmp(var, "repack.usedeltabaseoffset") == 0) {
 178                prefer_ofs_delta = git_config_bool(var, value);
 179                return 0;
 180        }
 181
 182        if (strcmp(var, "receive.updateserverinfo") == 0) {
 183                auto_update_server_info = git_config_bool(var, value);
 184                return 0;
 185        }
 186
 187        if (strcmp(var, "receive.autogc") == 0) {
 188                auto_gc = git_config_bool(var, value);
 189                return 0;
 190        }
 191
 192        if (strcmp(var, "receive.shallowupdate") == 0) {
 193                shallow_update = git_config_bool(var, value);
 194                return 0;
 195        }
 196
 197        if (strcmp(var, "receive.certnonceseed") == 0)
 198                return git_config_string(&cert_nonce_seed, var, value);
 199
 200        if (strcmp(var, "receive.certnonceslop") == 0) {
 201                nonce_stamp_slop_limit = git_config_ulong(var, value);
 202                return 0;
 203        }
 204
 205        if (strcmp(var, "receive.advertiseatomic") == 0) {
 206                advertise_atomic_push = git_config_bool(var, value);
 207                return 0;
 208        }
 209
 210        if (strcmp(var, "receive.advertisepushoptions") == 0) {
 211                advertise_push_options = git_config_bool(var, value);
 212                return 0;
 213        }
 214
 215        if (strcmp(var, "receive.keepalive") == 0) {
 216                keepalive_in_sec = git_config_int(var, value);
 217                return 0;
 218        }
 219
 220        if (strcmp(var, "receive.maxinputsize") == 0) {
 221                max_input_size = git_config_int64(var, value);
 222                return 0;
 223        }
 224
 225        return git_default_config(var, value, cb);
 226}
 227
 228static void show_ref(const char *path, const struct object_id *oid)
 229{
 230        if (sent_capabilities) {
 231                packet_write_fmt(1, "%s %s\n", oid_to_hex(oid), path);
 232        } else {
 233                struct strbuf cap = STRBUF_INIT;
 234
 235                strbuf_addstr(&cap,
 236                              "report-status delete-refs side-band-64k quiet");
 237                if (advertise_atomic_push)
 238                        strbuf_addstr(&cap, " atomic");
 239                if (prefer_ofs_delta)
 240                        strbuf_addstr(&cap, " ofs-delta");
 241                if (push_cert_nonce)
 242                        strbuf_addf(&cap, " push-cert=%s", push_cert_nonce);
 243                if (advertise_push_options)
 244                        strbuf_addstr(&cap, " push-options");
 245                strbuf_addf(&cap, " agent=%s", git_user_agent_sanitized());
 246                packet_write_fmt(1, "%s %s%c%s\n",
 247                             oid_to_hex(oid), path, 0, cap.buf);
 248                strbuf_release(&cap);
 249                sent_capabilities = 1;
 250        }
 251}
 252
 253static int show_ref_cb(const char *path_full, const struct object_id *oid,
 254                       int flag, void *data)
 255{
 256        struct oidset *seen = data;
 257        const char *path = strip_namespace(path_full);
 258
 259        if (ref_is_hidden(path, path_full))
 260                return 0;
 261
 262        /*
 263         * Advertise refs outside our current namespace as ".have"
 264         * refs, so that the client can use them to minimize data
 265         * transfer but will otherwise ignore them.
 266         */
 267        if (!path) {
 268                if (oidset_insert(seen, oid))
 269                        return 0;
 270                path = ".have";
 271        } else {
 272                oidset_insert(seen, oid);
 273        }
 274        show_ref(path, oid);
 275        return 0;
 276}
 277
 278static void show_one_alternate_ref(const char *refname,
 279                                   const struct object_id *oid,
 280                                   void *data)
 281{
 282        struct oidset *seen = data;
 283
 284        if (oidset_insert(seen, oid))
 285                return;
 286
 287        show_ref(".have", oid);
 288}
 289
 290static void write_head_info(void)
 291{
 292        static struct oidset seen = OIDSET_INIT;
 293
 294        for_each_ref(show_ref_cb, &seen);
 295        for_each_alternate_ref(show_one_alternate_ref, &seen);
 296        oidset_clear(&seen);
 297        if (!sent_capabilities)
 298                show_ref("capabilities^{}", &null_oid);
 299
 300        advertise_shallow_grafts(1);
 301
 302        /* EOF */
 303        packet_flush(1);
 304}
 305
 306struct command {
 307        struct command *next;
 308        const char *error_string;
 309        unsigned int skip_update:1,
 310                     did_not_exist:1;
 311        int index;
 312        struct object_id old_oid;
 313        struct object_id new_oid;
 314        char ref_name[FLEX_ARRAY]; /* more */
 315};
 316
 317static void rp_error(const char *err, ...) __attribute__((format (printf, 1, 2)));
 318static void rp_warning(const char *err, ...) __attribute__((format (printf, 1, 2)));
 319
 320static void report_message(const char *prefix, const char *err, va_list params)
 321{
 322        int sz;
 323        char msg[4096];
 324
 325        sz = xsnprintf(msg, sizeof(msg), "%s", prefix);
 326        sz += vsnprintf(msg + sz, sizeof(msg) - sz, err, params);
 327        if (sz > (sizeof(msg) - 1))
 328                sz = sizeof(msg) - 1;
 329        msg[sz++] = '\n';
 330
 331        if (use_sideband)
 332                send_sideband(1, 2, msg, sz, use_sideband);
 333        else
 334                xwrite(2, msg, sz);
 335}
 336
 337static void rp_warning(const char *err, ...)
 338{
 339        va_list params;
 340        va_start(params, err);
 341        report_message("warning: ", err, params);
 342        va_end(params);
 343}
 344
 345static void rp_error(const char *err, ...)
 346{
 347        va_list params;
 348        va_start(params, err);
 349        report_message("error: ", err, params);
 350        va_end(params);
 351}
 352
 353static int copy_to_sideband(int in, int out, void *arg)
 354{
 355        char data[128];
 356        int keepalive_active = 0;
 357
 358        if (keepalive_in_sec <= 0)
 359                use_keepalive = KEEPALIVE_NEVER;
 360        if (use_keepalive == KEEPALIVE_ALWAYS)
 361                keepalive_active = 1;
 362
 363        while (1) {
 364                ssize_t sz;
 365
 366                if (keepalive_active) {
 367                        struct pollfd pfd;
 368                        int ret;
 369
 370                        pfd.fd = in;
 371                        pfd.events = POLLIN;
 372                        ret = poll(&pfd, 1, 1000 * keepalive_in_sec);
 373
 374                        if (ret < 0) {
 375                                if (errno == EINTR)
 376                                        continue;
 377                                else
 378                                        break;
 379                        } else if (ret == 0) {
 380                                /* no data; send a keepalive packet */
 381                                static const char buf[] = "0005\1";
 382                                write_or_die(1, buf, sizeof(buf) - 1);
 383                                continue;
 384                        } /* else there is actual data to read */
 385                }
 386
 387                sz = xread(in, data, sizeof(data));
 388                if (sz <= 0)
 389                        break;
 390
 391                if (use_keepalive == KEEPALIVE_AFTER_NUL && !keepalive_active) {
 392                        const char *p = memchr(data, '\0', sz);
 393                        if (p) {
 394                                /*
 395                                 * The NUL tells us to start sending keepalives. Make
 396                                 * sure we send any other data we read along
 397                                 * with it.
 398                                 */
 399                                keepalive_active = 1;
 400                                send_sideband(1, 2, data, p - data, use_sideband);
 401                                send_sideband(1, 2, p + 1, sz - (p - data + 1), use_sideband);
 402                                continue;
 403                        }
 404                }
 405
 406                /*
 407                 * Either we're not looking for a NUL signal, or we didn't see
 408                 * it yet; just pass along the data.
 409                 */
 410                send_sideband(1, 2, data, sz, use_sideband);
 411        }
 412        close(in);
 413        return 0;
 414}
 415
 416#define HMAC_BLOCK_SIZE 64
 417
 418static void hmac_sha1(unsigned char *out,
 419                      const char *key_in, size_t key_len,
 420                      const char *text, size_t text_len)
 421{
 422        unsigned char key[HMAC_BLOCK_SIZE];
 423        unsigned char k_ipad[HMAC_BLOCK_SIZE];
 424        unsigned char k_opad[HMAC_BLOCK_SIZE];
 425        int i;
 426        git_SHA_CTX ctx;
 427
 428        /* RFC 2104 2. (1) */
 429        memset(key, '\0', HMAC_BLOCK_SIZE);
 430        if (HMAC_BLOCK_SIZE < key_len) {
 431                git_SHA1_Init(&ctx);
 432                git_SHA1_Update(&ctx, key_in, key_len);
 433                git_SHA1_Final(key, &ctx);
 434        } else {
 435                memcpy(key, key_in, key_len);
 436        }
 437
 438        /* RFC 2104 2. (2) & (5) */
 439        for (i = 0; i < sizeof(key); i++) {
 440                k_ipad[i] = key[i] ^ 0x36;
 441                k_opad[i] = key[i] ^ 0x5c;
 442        }
 443
 444        /* RFC 2104 2. (3) & (4) */
 445        git_SHA1_Init(&ctx);
 446        git_SHA1_Update(&ctx, k_ipad, sizeof(k_ipad));
 447        git_SHA1_Update(&ctx, text, text_len);
 448        git_SHA1_Final(out, &ctx);
 449
 450        /* RFC 2104 2. (6) & (7) */
 451        git_SHA1_Init(&ctx);
 452        git_SHA1_Update(&ctx, k_opad, sizeof(k_opad));
 453        git_SHA1_Update(&ctx, out, 20);
 454        git_SHA1_Final(out, &ctx);
 455}
 456
 457static char *prepare_push_cert_nonce(const char *path, unsigned long stamp)
 458{
 459        struct strbuf buf = STRBUF_INIT;
 460        unsigned char sha1[20];
 461
 462        strbuf_addf(&buf, "%s:%lu", path, stamp);
 463        hmac_sha1(sha1, buf.buf, buf.len, cert_nonce_seed, strlen(cert_nonce_seed));;
 464        strbuf_release(&buf);
 465
 466        /* RFC 2104 5. HMAC-SHA1-80 */
 467        strbuf_addf(&buf, "%lu-%.*s", stamp, 20, sha1_to_hex(sha1));
 468        return strbuf_detach(&buf, NULL);
 469}
 470
 471/*
 472 * NEEDSWORK: reuse find_commit_header() from jk/commit-author-parsing
 473 * after dropping "_commit" from its name and possibly moving it out
 474 * of commit.c
 475 */
 476static char *find_header(const char *msg, size_t len, const char *key)
 477{
 478        int key_len = strlen(key);
 479        const char *line = msg;
 480
 481        while (line && line < msg + len) {
 482                const char *eol = strchrnul(line, '\n');
 483
 484                if ((msg + len <= eol) || line == eol)
 485                        return NULL;
 486                if (line + key_len < eol &&
 487                    !memcmp(line, key, key_len) && line[key_len] == ' ') {
 488                        int offset = key_len + 1;
 489                        return xmemdupz(line + offset, (eol - line) - offset);
 490                }
 491                line = *eol ? eol + 1 : NULL;
 492        }
 493        return NULL;
 494}
 495
 496static const char *check_nonce(const char *buf, size_t len)
 497{
 498        char *nonce = find_header(buf, len, "nonce");
 499        unsigned long stamp, ostamp;
 500        char *bohmac, *expect = NULL;
 501        const char *retval = NONCE_BAD;
 502
 503        if (!nonce) {
 504                retval = NONCE_MISSING;
 505                goto leave;
 506        } else if (!push_cert_nonce) {
 507                retval = NONCE_UNSOLICITED;
 508                goto leave;
 509        } else if (!strcmp(push_cert_nonce, nonce)) {
 510                retval = NONCE_OK;
 511                goto leave;
 512        }
 513
 514        if (!stateless_rpc) {
 515                /* returned nonce MUST match what we gave out earlier */
 516                retval = NONCE_BAD;
 517                goto leave;
 518        }
 519
 520        /*
 521         * In stateless mode, we may be receiving a nonce issued by
 522         * another instance of the server that serving the same
 523         * repository, and the timestamps may not match, but the
 524         * nonce-seed and dir should match, so we can recompute and
 525         * report the time slop.
 526         *
 527         * In addition, when a nonce issued by another instance has
 528         * timestamp within receive.certnonceslop seconds, we pretend
 529         * as if we issued that nonce when reporting to the hook.
 530         */
 531
 532        /* nonce is concat(<seconds-since-epoch>, "-", <hmac>) */
 533        if (*nonce <= '0' || '9' < *nonce) {
 534                retval = NONCE_BAD;
 535                goto leave;
 536        }
 537        stamp = strtoul(nonce, &bohmac, 10);
 538        if (bohmac == nonce || bohmac[0] != '-') {
 539                retval = NONCE_BAD;
 540                goto leave;
 541        }
 542
 543        expect = prepare_push_cert_nonce(service_dir, stamp);
 544        if (strcmp(expect, nonce)) {
 545                /* Not what we would have signed earlier */
 546                retval = NONCE_BAD;
 547                goto leave;
 548        }
 549
 550        /*
 551         * By how many seconds is this nonce stale?  Negative value
 552         * would mean it was issued by another server with its clock
 553         * skewed in the future.
 554         */
 555        ostamp = strtoul(push_cert_nonce, NULL, 10);
 556        nonce_stamp_slop = (long)ostamp - (long)stamp;
 557
 558        if (nonce_stamp_slop_limit &&
 559            labs(nonce_stamp_slop) <= nonce_stamp_slop_limit) {
 560                /*
 561                 * Pretend as if the received nonce (which passes the
 562                 * HMAC check, so it is not a forged by third-party)
 563                 * is what we issued.
 564                 */
 565                free((void *)push_cert_nonce);
 566                push_cert_nonce = xstrdup(nonce);
 567                retval = NONCE_OK;
 568        } else {
 569                retval = NONCE_SLOP;
 570        }
 571
 572leave:
 573        free(nonce);
 574        free(expect);
 575        return retval;
 576}
 577
 578static void prepare_push_cert_sha1(struct child_process *proc)
 579{
 580        static int already_done;
 581
 582        if (!push_cert.len)
 583                return;
 584
 585        if (!already_done) {
 586                struct strbuf gpg_output = STRBUF_INIT;
 587                struct strbuf gpg_status = STRBUF_INIT;
 588                int bogs /* beginning_of_gpg_sig */;
 589
 590                already_done = 1;
 591                if (write_sha1_file(push_cert.buf, push_cert.len, "blob", push_cert_sha1))
 592                        hashclr(push_cert_sha1);
 593
 594                memset(&sigcheck, '\0', sizeof(sigcheck));
 595                sigcheck.result = 'N';
 596
 597                bogs = parse_signature(push_cert.buf, push_cert.len);
 598                if (verify_signed_buffer(push_cert.buf, bogs,
 599                                         push_cert.buf + bogs, push_cert.len - bogs,
 600                                         &gpg_output, &gpg_status) < 0) {
 601                        ; /* error running gpg */
 602                } else {
 603                        sigcheck.payload = push_cert.buf;
 604                        sigcheck.gpg_output = gpg_output.buf;
 605                        sigcheck.gpg_status = gpg_status.buf;
 606                        parse_gpg_output(&sigcheck);
 607                }
 608
 609                strbuf_release(&gpg_output);
 610                strbuf_release(&gpg_status);
 611                nonce_status = check_nonce(push_cert.buf, bogs);
 612        }
 613        if (!is_null_sha1(push_cert_sha1)) {
 614                argv_array_pushf(&proc->env_array, "GIT_PUSH_CERT=%s",
 615                                 sha1_to_hex(push_cert_sha1));
 616                argv_array_pushf(&proc->env_array, "GIT_PUSH_CERT_SIGNER=%s",
 617                                 sigcheck.signer ? sigcheck.signer : "");
 618                argv_array_pushf(&proc->env_array, "GIT_PUSH_CERT_KEY=%s",
 619                                 sigcheck.key ? sigcheck.key : "");
 620                argv_array_pushf(&proc->env_array, "GIT_PUSH_CERT_STATUS=%c",
 621                                 sigcheck.result);
 622                if (push_cert_nonce) {
 623                        argv_array_pushf(&proc->env_array,
 624                                         "GIT_PUSH_CERT_NONCE=%s",
 625                                         push_cert_nonce);
 626                        argv_array_pushf(&proc->env_array,
 627                                         "GIT_PUSH_CERT_NONCE_STATUS=%s",
 628                                         nonce_status);
 629                        if (nonce_status == NONCE_SLOP)
 630                                argv_array_pushf(&proc->env_array,
 631                                                 "GIT_PUSH_CERT_NONCE_SLOP=%ld",
 632                                                 nonce_stamp_slop);
 633                }
 634        }
 635}
 636
 637struct receive_hook_feed_state {
 638        struct command *cmd;
 639        int skip_broken;
 640        struct strbuf buf;
 641        const struct string_list *push_options;
 642};
 643
 644typedef int (*feed_fn)(void *, const char **, size_t *);
 645static int run_and_feed_hook(const char *hook_name, feed_fn feed,
 646                             struct receive_hook_feed_state *feed_state)
 647{
 648        struct child_process proc = CHILD_PROCESS_INIT;
 649        struct async muxer;
 650        const char *argv[2];
 651        int code;
 652
 653        argv[0] = find_hook(hook_name);
 654        if (!argv[0])
 655                return 0;
 656
 657        argv[1] = NULL;
 658
 659        proc.argv = argv;
 660        proc.in = -1;
 661        proc.stdout_to_stderr = 1;
 662        if (feed_state->push_options) {
 663                int i;
 664                for (i = 0; i < feed_state->push_options->nr; i++)
 665                        argv_array_pushf(&proc.env_array,
 666                                "GIT_PUSH_OPTION_%d=%s", i,
 667                                feed_state->push_options->items[i].string);
 668                argv_array_pushf(&proc.env_array, "GIT_PUSH_OPTION_COUNT=%d",
 669                                 feed_state->push_options->nr);
 670        } else
 671                argv_array_pushf(&proc.env_array, "GIT_PUSH_OPTION_COUNT");
 672
 673        if (tmp_objdir)
 674                argv_array_pushv(&proc.env_array, tmp_objdir_env(tmp_objdir));
 675
 676        if (use_sideband) {
 677                memset(&muxer, 0, sizeof(muxer));
 678                muxer.proc = copy_to_sideband;
 679                muxer.in = -1;
 680                code = start_async(&muxer);
 681                if (code)
 682                        return code;
 683                proc.err = muxer.in;
 684        }
 685
 686        prepare_push_cert_sha1(&proc);
 687
 688        code = start_command(&proc);
 689        if (code) {
 690                if (use_sideband)
 691                        finish_async(&muxer);
 692                return code;
 693        }
 694
 695        sigchain_push(SIGPIPE, SIG_IGN);
 696
 697        while (1) {
 698                const char *buf;
 699                size_t n;
 700                if (feed(feed_state, &buf, &n))
 701                        break;
 702                if (write_in_full(proc.in, buf, n) != n)
 703                        break;
 704        }
 705        close(proc.in);
 706        if (use_sideband)
 707                finish_async(&muxer);
 708
 709        sigchain_pop(SIGPIPE);
 710
 711        return finish_command(&proc);
 712}
 713
 714static int feed_receive_hook(void *state_, const char **bufp, size_t *sizep)
 715{
 716        struct receive_hook_feed_state *state = state_;
 717        struct command *cmd = state->cmd;
 718
 719        while (cmd &&
 720               state->skip_broken && (cmd->error_string || cmd->did_not_exist))
 721                cmd = cmd->next;
 722        if (!cmd)
 723                return -1; /* EOF */
 724        strbuf_reset(&state->buf);
 725        strbuf_addf(&state->buf, "%s %s %s\n",
 726                    oid_to_hex(&cmd->old_oid), oid_to_hex(&cmd->new_oid),
 727                    cmd->ref_name);
 728        state->cmd = cmd->next;
 729        if (bufp) {
 730                *bufp = state->buf.buf;
 731                *sizep = state->buf.len;
 732        }
 733        return 0;
 734}
 735
 736static int run_receive_hook(struct command *commands,
 737                            const char *hook_name,
 738                            int skip_broken,
 739                            const struct string_list *push_options)
 740{
 741        struct receive_hook_feed_state state;
 742        int status;
 743
 744        strbuf_init(&state.buf, 0);
 745        state.cmd = commands;
 746        state.skip_broken = skip_broken;
 747        if (feed_receive_hook(&state, NULL, NULL))
 748                return 0;
 749        state.cmd = commands;
 750        state.push_options = push_options;
 751        status = run_and_feed_hook(hook_name, feed_receive_hook, &state);
 752        strbuf_release(&state.buf);
 753        return status;
 754}
 755
 756static int run_update_hook(struct command *cmd)
 757{
 758        const char *argv[5];
 759        struct child_process proc = CHILD_PROCESS_INIT;
 760        int code;
 761
 762        argv[0] = find_hook("update");
 763        if (!argv[0])
 764                return 0;
 765
 766        argv[1] = cmd->ref_name;
 767        argv[2] = oid_to_hex(&cmd->old_oid);
 768        argv[3] = oid_to_hex(&cmd->new_oid);
 769        argv[4] = NULL;
 770
 771        proc.no_stdin = 1;
 772        proc.stdout_to_stderr = 1;
 773        proc.err = use_sideband ? -1 : 0;
 774        proc.argv = argv;
 775
 776        code = start_command(&proc);
 777        if (code)
 778                return code;
 779        if (use_sideband)
 780                copy_to_sideband(proc.err, -1, NULL);
 781        return finish_command(&proc);
 782}
 783
 784static int is_ref_checked_out(const char *ref)
 785{
 786        if (is_bare_repository())
 787                return 0;
 788
 789        if (!head_name)
 790                return 0;
 791        return !strcmp(head_name, ref);
 792}
 793
 794static char *refuse_unconfigured_deny_msg =
 795        N_("By default, updating the current branch in a non-bare repository\n"
 796           "is denied, because it will make the index and work tree inconsistent\n"
 797           "with what you pushed, and will require 'git reset --hard' to match\n"
 798           "the work tree to HEAD.\n"
 799           "\n"
 800           "You can set the 'receive.denyCurrentBranch' configuration variable\n"
 801           "to 'ignore' or 'warn' in the remote repository to allow pushing into\n"
 802           "its current branch; however, this is not recommended unless you\n"
 803           "arranged to update its work tree to match what you pushed in some\n"
 804           "other way.\n"
 805           "\n"
 806           "To squelch this message and still keep the default behaviour, set\n"
 807           "'receive.denyCurrentBranch' configuration variable to 'refuse'.");
 808
 809static void refuse_unconfigured_deny(void)
 810{
 811        rp_error("%s", _(refuse_unconfigured_deny_msg));
 812}
 813
 814static char *refuse_unconfigured_deny_delete_current_msg =
 815        N_("By default, deleting the current branch is denied, because the next\n"
 816           "'git clone' won't result in any file checked out, causing confusion.\n"
 817           "\n"
 818           "You can set 'receive.denyDeleteCurrent' configuration variable to\n"
 819           "'warn' or 'ignore' in the remote repository to allow deleting the\n"
 820           "current branch, with or without a warning message.\n"
 821           "\n"
 822           "To squelch this message, you can set it to 'refuse'.");
 823
 824static void refuse_unconfigured_deny_delete_current(void)
 825{
 826        rp_error("%s", _(refuse_unconfigured_deny_delete_current_msg));
 827}
 828
 829static int command_singleton_iterator(void *cb_data, unsigned char sha1[20]);
 830static int update_shallow_ref(struct command *cmd, struct shallow_info *si)
 831{
 832        static struct lock_file shallow_lock;
 833        struct oid_array extra = OID_ARRAY_INIT;
 834        struct check_connected_options opt = CHECK_CONNECTED_INIT;
 835        uint32_t mask = 1 << (cmd->index % 32);
 836        int i;
 837
 838        trace_printf_key(&trace_shallow,
 839                         "shallow: update_shallow_ref %s\n", cmd->ref_name);
 840        for (i = 0; i < si->shallow->nr; i++)
 841                if (si->used_shallow[i] &&
 842                    (si->used_shallow[i][cmd->index / 32] & mask) &&
 843                    !delayed_reachability_test(si, i))
 844                        oid_array_append(&extra, &si->shallow->oid[i]);
 845
 846        opt.env = tmp_objdir_env(tmp_objdir);
 847        setup_alternate_shallow(&shallow_lock, &opt.shallow_file, &extra);
 848        if (check_connected(command_singleton_iterator, cmd, &opt)) {
 849                rollback_lock_file(&shallow_lock);
 850                oid_array_clear(&extra);
 851                return -1;
 852        }
 853
 854        commit_lock_file(&shallow_lock);
 855
 856        /*
 857         * Make sure setup_alternate_shallow() for the next ref does
 858         * not lose these new roots..
 859         */
 860        for (i = 0; i < extra.nr; i++)
 861                register_shallow(extra.oid[i].hash);
 862
 863        si->shallow_ref[cmd->index] = 0;
 864        oid_array_clear(&extra);
 865        return 0;
 866}
 867
 868/*
 869 * NEEDSWORK: we should consolidate various implementions of "are we
 870 * on an unborn branch?" test into one, and make the unified one more
 871 * robust. !get_sha1() based check used here and elsewhere would not
 872 * allow us to tell an unborn branch from corrupt ref, for example.
 873 * For the purpose of fixing "deploy-to-update does not work when
 874 * pushing into an empty repository" issue, this should suffice for
 875 * now.
 876 */
 877static int head_has_history(void)
 878{
 879        unsigned char sha1[20];
 880
 881        return !get_sha1("HEAD", sha1);
 882}
 883
 884static const char *push_to_deploy(unsigned char *sha1,
 885                                  struct argv_array *env,
 886                                  const char *work_tree)
 887{
 888        const char *update_refresh[] = {
 889                "update-index", "-q", "--ignore-submodules", "--refresh", NULL
 890        };
 891        const char *diff_files[] = {
 892                "diff-files", "--quiet", "--ignore-submodules", "--", NULL
 893        };
 894        const char *diff_index[] = {
 895                "diff-index", "--quiet", "--cached", "--ignore-submodules",
 896                NULL, "--", NULL
 897        };
 898        const char *read_tree[] = {
 899                "read-tree", "-u", "-m", NULL, NULL
 900        };
 901        struct child_process child = CHILD_PROCESS_INIT;
 902
 903        child.argv = update_refresh;
 904        child.env = env->argv;
 905        child.dir = work_tree;
 906        child.no_stdin = 1;
 907        child.stdout_to_stderr = 1;
 908        child.git_cmd = 1;
 909        if (run_command(&child))
 910                return "Up-to-date check failed";
 911
 912        /* run_command() does not clean up completely; reinitialize */
 913        child_process_init(&child);
 914        child.argv = diff_files;
 915        child.env = env->argv;
 916        child.dir = work_tree;
 917        child.no_stdin = 1;
 918        child.stdout_to_stderr = 1;
 919        child.git_cmd = 1;
 920        if (run_command(&child))
 921                return "Working directory has unstaged changes";
 922
 923        /* diff-index with either HEAD or an empty tree */
 924        diff_index[4] = head_has_history() ? "HEAD" : EMPTY_TREE_SHA1_HEX;
 925
 926        child_process_init(&child);
 927        child.argv = diff_index;
 928        child.env = env->argv;
 929        child.no_stdin = 1;
 930        child.no_stdout = 1;
 931        child.stdout_to_stderr = 0;
 932        child.git_cmd = 1;
 933        if (run_command(&child))
 934                return "Working directory has staged changes";
 935
 936        read_tree[3] = sha1_to_hex(sha1);
 937        child_process_init(&child);
 938        child.argv = read_tree;
 939        child.env = env->argv;
 940        child.dir = work_tree;
 941        child.no_stdin = 1;
 942        child.no_stdout = 1;
 943        child.stdout_to_stderr = 0;
 944        child.git_cmd = 1;
 945        if (run_command(&child))
 946                return "Could not update working tree to new HEAD";
 947
 948        return NULL;
 949}
 950
 951static const char *push_to_checkout_hook = "push-to-checkout";
 952
 953static const char *push_to_checkout(unsigned char *sha1,
 954                                    struct argv_array *env,
 955                                    const char *work_tree)
 956{
 957        argv_array_pushf(env, "GIT_WORK_TREE=%s", absolute_path(work_tree));
 958        if (run_hook_le(env->argv, push_to_checkout_hook,
 959                        sha1_to_hex(sha1), NULL))
 960                return "push-to-checkout hook declined";
 961        else
 962                return NULL;
 963}
 964
 965static const char *update_worktree(unsigned char *sha1)
 966{
 967        const char *retval;
 968        const char *work_tree = git_work_tree_cfg ? git_work_tree_cfg : "..";
 969        struct argv_array env = ARGV_ARRAY_INIT;
 970
 971        if (is_bare_repository())
 972                return "denyCurrentBranch = updateInstead needs a worktree";
 973
 974        argv_array_pushf(&env, "GIT_DIR=%s", absolute_path(get_git_dir()));
 975
 976        if (!find_hook(push_to_checkout_hook))
 977                retval = push_to_deploy(sha1, &env, work_tree);
 978        else
 979                retval = push_to_checkout(sha1, &env, work_tree);
 980
 981        argv_array_clear(&env);
 982        return retval;
 983}
 984
 985static const char *update(struct command *cmd, struct shallow_info *si)
 986{
 987        const char *name = cmd->ref_name;
 988        struct strbuf namespaced_name_buf = STRBUF_INIT;
 989        static char *namespaced_name;
 990        const char *ret;
 991        struct object_id *old_oid = &cmd->old_oid;
 992        struct object_id *new_oid = &cmd->new_oid;
 993
 994        /* only refs/... are allowed */
 995        if (!starts_with(name, "refs/") || check_refname_format(name + 5, 0)) {
 996                rp_error("refusing to create funny ref '%s' remotely", name);
 997                return "funny refname";
 998        }
 999
1000        strbuf_addf(&namespaced_name_buf, "%s%s", get_git_namespace(), name);
1001        free(namespaced_name);
1002        namespaced_name = strbuf_detach(&namespaced_name_buf, NULL);
1003
1004        if (is_ref_checked_out(namespaced_name)) {
1005                switch (deny_current_branch) {
1006                case DENY_IGNORE:
1007                        break;
1008                case DENY_WARN:
1009                        rp_warning("updating the current branch");
1010                        break;
1011                case DENY_REFUSE:
1012                case DENY_UNCONFIGURED:
1013                        rp_error("refusing to update checked out branch: %s", name);
1014                        if (deny_current_branch == DENY_UNCONFIGURED)
1015                                refuse_unconfigured_deny();
1016                        return "branch is currently checked out";
1017                case DENY_UPDATE_INSTEAD:
1018                        ret = update_worktree(new_oid->hash);
1019                        if (ret)
1020                                return ret;
1021                        break;
1022                }
1023        }
1024
1025        if (!is_null_oid(new_oid) && !has_object_file(new_oid)) {
1026                error("unpack should have generated %s, "
1027                      "but I can't find it!", oid_to_hex(new_oid));
1028                return "bad pack";
1029        }
1030
1031        if (!is_null_oid(old_oid) && is_null_oid(new_oid)) {
1032                if (deny_deletes && starts_with(name, "refs/heads/")) {
1033                        rp_error("denying ref deletion for %s", name);
1034                        return "deletion prohibited";
1035                }
1036
1037                if (head_name && !strcmp(namespaced_name, head_name)) {
1038                        switch (deny_delete_current) {
1039                        case DENY_IGNORE:
1040                                break;
1041                        case DENY_WARN:
1042                                rp_warning("deleting the current branch");
1043                                break;
1044                        case DENY_REFUSE:
1045                        case DENY_UNCONFIGURED:
1046                        case DENY_UPDATE_INSTEAD:
1047                                if (deny_delete_current == DENY_UNCONFIGURED)
1048                                        refuse_unconfigured_deny_delete_current();
1049                                rp_error("refusing to delete the current branch: %s", name);
1050                                return "deletion of the current branch prohibited";
1051                        default:
1052                                return "Invalid denyDeleteCurrent setting";
1053                        }
1054                }
1055        }
1056
1057        if (deny_non_fast_forwards && !is_null_oid(new_oid) &&
1058            !is_null_oid(old_oid) &&
1059            starts_with(name, "refs/heads/")) {
1060                struct object *old_object, *new_object;
1061                struct commit *old_commit, *new_commit;
1062
1063                old_object = parse_object(old_oid->hash);
1064                new_object = parse_object(new_oid->hash);
1065
1066                if (!old_object || !new_object ||
1067                    old_object->type != OBJ_COMMIT ||
1068                    new_object->type != OBJ_COMMIT) {
1069                        error("bad sha1 objects for %s", name);
1070                        return "bad ref";
1071                }
1072                old_commit = (struct commit *)old_object;
1073                new_commit = (struct commit *)new_object;
1074                if (!in_merge_bases(old_commit, new_commit)) {
1075                        rp_error("denying non-fast-forward %s"
1076                                 " (you should pull first)", name);
1077                        return "non-fast-forward";
1078                }
1079        }
1080        if (run_update_hook(cmd)) {
1081                rp_error("hook declined to update %s", name);
1082                return "hook declined";
1083        }
1084
1085        if (is_null_oid(new_oid)) {
1086                struct strbuf err = STRBUF_INIT;
1087                if (!parse_object(old_oid->hash)) {
1088                        old_oid = NULL;
1089                        if (ref_exists(name)) {
1090                                rp_warning("Allowing deletion of corrupt ref.");
1091                        } else {
1092                                rp_warning("Deleting a non-existent ref.");
1093                                cmd->did_not_exist = 1;
1094                        }
1095                }
1096                if (ref_transaction_delete(transaction,
1097                                           namespaced_name,
1098                                           old_oid->hash,
1099                                           0, "push", &err)) {
1100                        rp_error("%s", err.buf);
1101                        strbuf_release(&err);
1102                        return "failed to delete";
1103                }
1104                strbuf_release(&err);
1105                return NULL; /* good */
1106        }
1107        else {
1108                struct strbuf err = STRBUF_INIT;
1109                if (shallow_update && si->shallow_ref[cmd->index] &&
1110                    update_shallow_ref(cmd, si))
1111                        return "shallow error";
1112
1113                if (ref_transaction_update(transaction,
1114                                           namespaced_name,
1115                                           new_oid->hash, old_oid->hash,
1116                                           0, "push",
1117                                           &err)) {
1118                        rp_error("%s", err.buf);
1119                        strbuf_release(&err);
1120
1121                        return "failed to update ref";
1122                }
1123                strbuf_release(&err);
1124
1125                return NULL; /* good */
1126        }
1127}
1128
1129static void run_update_post_hook(struct command *commands)
1130{
1131        struct command *cmd;
1132        struct child_process proc = CHILD_PROCESS_INIT;
1133        const char *hook;
1134
1135        hook = find_hook("post-update");
1136        if (!hook)
1137                return;
1138
1139        for (cmd = commands; cmd; cmd = cmd->next) {
1140                if (cmd->error_string || cmd->did_not_exist)
1141                        continue;
1142                if (!proc.args.argc)
1143                        argv_array_push(&proc.args, hook);
1144                argv_array_push(&proc.args, cmd->ref_name);
1145        }
1146        if (!proc.args.argc)
1147                return;
1148
1149        proc.no_stdin = 1;
1150        proc.stdout_to_stderr = 1;
1151        proc.err = use_sideband ? -1 : 0;
1152
1153        if (!start_command(&proc)) {
1154                if (use_sideband)
1155                        copy_to_sideband(proc.err, -1, NULL);
1156                finish_command(&proc);
1157        }
1158}
1159
1160static void check_aliased_update(struct command *cmd, struct string_list *list)
1161{
1162        struct strbuf buf = STRBUF_INIT;
1163        const char *dst_name;
1164        struct string_list_item *item;
1165        struct command *dst_cmd;
1166        unsigned char sha1[GIT_MAX_RAWSZ];
1167        int flag;
1168
1169        strbuf_addf(&buf, "%s%s", get_git_namespace(), cmd->ref_name);
1170        dst_name = resolve_ref_unsafe(buf.buf, 0, sha1, &flag);
1171        strbuf_release(&buf);
1172
1173        if (!(flag & REF_ISSYMREF))
1174                return;
1175
1176        if (!dst_name) {
1177                rp_error("refusing update to broken symref '%s'", cmd->ref_name);
1178                cmd->skip_update = 1;
1179                cmd->error_string = "broken symref";
1180                return;
1181        }
1182        dst_name = strip_namespace(dst_name);
1183
1184        if ((item = string_list_lookup(list, dst_name)) == NULL)
1185                return;
1186
1187        cmd->skip_update = 1;
1188
1189        dst_cmd = (struct command *) item->util;
1190
1191        if (!oidcmp(&cmd->old_oid, &dst_cmd->old_oid) &&
1192            !oidcmp(&cmd->new_oid, &dst_cmd->new_oid))
1193                return;
1194
1195        dst_cmd->skip_update = 1;
1196
1197        rp_error("refusing inconsistent update between symref '%s' (%s..%s) and"
1198                 " its target '%s' (%s..%s)",
1199                 cmd->ref_name,
1200                 find_unique_abbrev(cmd->old_oid.hash, DEFAULT_ABBREV),
1201                 find_unique_abbrev(cmd->new_oid.hash, DEFAULT_ABBREV),
1202                 dst_cmd->ref_name,
1203                 find_unique_abbrev(dst_cmd->old_oid.hash, DEFAULT_ABBREV),
1204                 find_unique_abbrev(dst_cmd->new_oid.hash, DEFAULT_ABBREV));
1205
1206        cmd->error_string = dst_cmd->error_string =
1207                "inconsistent aliased update";
1208}
1209
1210static void check_aliased_updates(struct command *commands)
1211{
1212        struct command *cmd;
1213        struct string_list ref_list = STRING_LIST_INIT_NODUP;
1214
1215        for (cmd = commands; cmd; cmd = cmd->next) {
1216                struct string_list_item *item =
1217                        string_list_append(&ref_list, cmd->ref_name);
1218                item->util = (void *)cmd;
1219        }
1220        string_list_sort(&ref_list);
1221
1222        for (cmd = commands; cmd; cmd = cmd->next) {
1223                if (!cmd->error_string)
1224                        check_aliased_update(cmd, &ref_list);
1225        }
1226
1227        string_list_clear(&ref_list, 0);
1228}
1229
1230static int command_singleton_iterator(void *cb_data, unsigned char sha1[20])
1231{
1232        struct command **cmd_list = cb_data;
1233        struct command *cmd = *cmd_list;
1234
1235        if (!cmd || is_null_oid(&cmd->new_oid))
1236                return -1; /* end of list */
1237        *cmd_list = NULL; /* this returns only one */
1238        hashcpy(sha1, cmd->new_oid.hash);
1239        return 0;
1240}
1241
1242static void set_connectivity_errors(struct command *commands,
1243                                    struct shallow_info *si)
1244{
1245        struct command *cmd;
1246
1247        for (cmd = commands; cmd; cmd = cmd->next) {
1248                struct command *singleton = cmd;
1249                struct check_connected_options opt = CHECK_CONNECTED_INIT;
1250
1251                if (shallow_update && si->shallow_ref[cmd->index])
1252                        /* to be checked in update_shallow_ref() */
1253                        continue;
1254
1255                opt.env = tmp_objdir_env(tmp_objdir);
1256                if (!check_connected(command_singleton_iterator, &singleton,
1257                                     &opt))
1258                        continue;
1259
1260                cmd->error_string = "missing necessary objects";
1261        }
1262}
1263
1264struct iterate_data {
1265        struct command *cmds;
1266        struct shallow_info *si;
1267};
1268
1269static int iterate_receive_command_list(void *cb_data, unsigned char sha1[20])
1270{
1271        struct iterate_data *data = cb_data;
1272        struct command **cmd_list = &data->cmds;
1273        struct command *cmd = *cmd_list;
1274
1275        for (; cmd; cmd = cmd->next) {
1276                if (shallow_update && data->si->shallow_ref[cmd->index])
1277                        /* to be checked in update_shallow_ref() */
1278                        continue;
1279                if (!is_null_oid(&cmd->new_oid) && !cmd->skip_update) {
1280                        hashcpy(sha1, cmd->new_oid.hash);
1281                        *cmd_list = cmd->next;
1282                        return 0;
1283                }
1284        }
1285        *cmd_list = NULL;
1286        return -1; /* end of list */
1287}
1288
1289static void reject_updates_to_hidden(struct command *commands)
1290{
1291        struct strbuf refname_full = STRBUF_INIT;
1292        size_t prefix_len;
1293        struct command *cmd;
1294
1295        strbuf_addstr(&refname_full, get_git_namespace());
1296        prefix_len = refname_full.len;
1297
1298        for (cmd = commands; cmd; cmd = cmd->next) {
1299                if (cmd->error_string)
1300                        continue;
1301
1302                strbuf_setlen(&refname_full, prefix_len);
1303                strbuf_addstr(&refname_full, cmd->ref_name);
1304
1305                if (!ref_is_hidden(cmd->ref_name, refname_full.buf))
1306                        continue;
1307                if (is_null_oid(&cmd->new_oid))
1308                        cmd->error_string = "deny deleting a hidden ref";
1309                else
1310                        cmd->error_string = "deny updating a hidden ref";
1311        }
1312
1313        strbuf_release(&refname_full);
1314}
1315
1316static int should_process_cmd(struct command *cmd)
1317{
1318        return !cmd->error_string && !cmd->skip_update;
1319}
1320
1321static void warn_if_skipped_connectivity_check(struct command *commands,
1322                                               struct shallow_info *si)
1323{
1324        struct command *cmd;
1325        int checked_connectivity = 1;
1326
1327        for (cmd = commands; cmd; cmd = cmd->next) {
1328                if (should_process_cmd(cmd) && si->shallow_ref[cmd->index]) {
1329                        error("BUG: connectivity check has not been run on ref %s",
1330                              cmd->ref_name);
1331                        checked_connectivity = 0;
1332                }
1333        }
1334        if (!checked_connectivity)
1335                die("BUG: connectivity check skipped???");
1336}
1337
1338static void execute_commands_non_atomic(struct command *commands,
1339                                        struct shallow_info *si)
1340{
1341        struct command *cmd;
1342        struct strbuf err = STRBUF_INIT;
1343
1344        for (cmd = commands; cmd; cmd = cmd->next) {
1345                if (!should_process_cmd(cmd))
1346                        continue;
1347
1348                transaction = ref_transaction_begin(&err);
1349                if (!transaction) {
1350                        rp_error("%s", err.buf);
1351                        strbuf_reset(&err);
1352                        cmd->error_string = "transaction failed to start";
1353                        continue;
1354                }
1355
1356                cmd->error_string = update(cmd, si);
1357
1358                if (!cmd->error_string
1359                    && ref_transaction_commit(transaction, &err)) {
1360                        rp_error("%s", err.buf);
1361                        strbuf_reset(&err);
1362                        cmd->error_string = "failed to update ref";
1363                }
1364                ref_transaction_free(transaction);
1365        }
1366        strbuf_release(&err);
1367}
1368
1369static void execute_commands_atomic(struct command *commands,
1370                                        struct shallow_info *si)
1371{
1372        struct command *cmd;
1373        struct strbuf err = STRBUF_INIT;
1374        const char *reported_error = "atomic push failure";
1375
1376        transaction = ref_transaction_begin(&err);
1377        if (!transaction) {
1378                rp_error("%s", err.buf);
1379                strbuf_reset(&err);
1380                reported_error = "transaction failed to start";
1381                goto failure;
1382        }
1383
1384        for (cmd = commands; cmd; cmd = cmd->next) {
1385                if (!should_process_cmd(cmd))
1386                        continue;
1387
1388                cmd->error_string = update(cmd, si);
1389
1390                if (cmd->error_string)
1391                        goto failure;
1392        }
1393
1394        if (ref_transaction_commit(transaction, &err)) {
1395                rp_error("%s", err.buf);
1396                reported_error = "atomic transaction failed";
1397                goto failure;
1398        }
1399        goto cleanup;
1400
1401failure:
1402        for (cmd = commands; cmd; cmd = cmd->next)
1403                if (!cmd->error_string)
1404                        cmd->error_string = reported_error;
1405
1406cleanup:
1407        ref_transaction_free(transaction);
1408        strbuf_release(&err);
1409}
1410
1411static void execute_commands(struct command *commands,
1412                             const char *unpacker_error,
1413                             struct shallow_info *si,
1414                             const struct string_list *push_options)
1415{
1416        struct check_connected_options opt = CHECK_CONNECTED_INIT;
1417        struct command *cmd;
1418        struct object_id oid;
1419        struct iterate_data data;
1420        struct async muxer;
1421        int err_fd = 0;
1422
1423        if (unpacker_error) {
1424                for (cmd = commands; cmd; cmd = cmd->next)
1425                        cmd->error_string = "unpacker error";
1426                return;
1427        }
1428
1429        if (use_sideband) {
1430                memset(&muxer, 0, sizeof(muxer));
1431                muxer.proc = copy_to_sideband;
1432                muxer.in = -1;
1433                if (!start_async(&muxer))
1434                        err_fd = muxer.in;
1435                /* ...else, continue without relaying sideband */
1436        }
1437
1438        data.cmds = commands;
1439        data.si = si;
1440        opt.err_fd = err_fd;
1441        opt.progress = err_fd && !quiet;
1442        opt.env = tmp_objdir_env(tmp_objdir);
1443        if (check_connected(iterate_receive_command_list, &data, &opt))
1444                set_connectivity_errors(commands, si);
1445
1446        if (use_sideband)
1447                finish_async(&muxer);
1448
1449        reject_updates_to_hidden(commands);
1450
1451        if (run_receive_hook(commands, "pre-receive", 0, push_options)) {
1452                for (cmd = commands; cmd; cmd = cmd->next) {
1453                        if (!cmd->error_string)
1454                                cmd->error_string = "pre-receive hook declined";
1455                }
1456                return;
1457        }
1458
1459        /*
1460         * Now we'll start writing out refs, which means the objects need
1461         * to be in their final positions so that other processes can see them.
1462         */
1463        if (tmp_objdir_migrate(tmp_objdir) < 0) {
1464                for (cmd = commands; cmd; cmd = cmd->next) {
1465                        if (!cmd->error_string)
1466                                cmd->error_string = "unable to migrate objects to permanent storage";
1467                }
1468                return;
1469        }
1470        tmp_objdir = NULL;
1471
1472        check_aliased_updates(commands);
1473
1474        free(head_name_to_free);
1475        head_name = head_name_to_free = resolve_refdup("HEAD", 0, oid.hash, NULL);
1476
1477        if (use_atomic)
1478                execute_commands_atomic(commands, si);
1479        else
1480                execute_commands_non_atomic(commands, si);
1481
1482        if (shallow_update)
1483                warn_if_skipped_connectivity_check(commands, si);
1484}
1485
1486static struct command **queue_command(struct command **tail,
1487                                      const char *line,
1488                                      int linelen)
1489{
1490        struct object_id old_oid, new_oid;
1491        struct command *cmd;
1492        const char *refname;
1493        int reflen;
1494        const char *p;
1495
1496        if (parse_oid_hex(line, &old_oid, &p) ||
1497            *p++ != ' ' ||
1498            parse_oid_hex(p, &new_oid, &p) ||
1499            *p++ != ' ')
1500                die("protocol error: expected old/new/ref, got '%s'", line);
1501
1502        refname = p;
1503        reflen = linelen - (p - line);
1504        FLEX_ALLOC_MEM(cmd, ref_name, refname, reflen);
1505        oidcpy(&cmd->old_oid, &old_oid);
1506        oidcpy(&cmd->new_oid, &new_oid);
1507        *tail = cmd;
1508        return &cmd->next;
1509}
1510
1511static void queue_commands_from_cert(struct command **tail,
1512                                     struct strbuf *push_cert)
1513{
1514        const char *boc, *eoc;
1515
1516        if (*tail)
1517                die("protocol error: got both push certificate and unsigned commands");
1518
1519        boc = strstr(push_cert->buf, "\n\n");
1520        if (!boc)
1521                die("malformed push certificate %.*s", 100, push_cert->buf);
1522        else
1523                boc += 2;
1524        eoc = push_cert->buf + parse_signature(push_cert->buf, push_cert->len);
1525
1526        while (boc < eoc) {
1527                const char *eol = memchr(boc, '\n', eoc - boc);
1528                tail = queue_command(tail, boc, eol ? eol - boc : eoc - boc);
1529                boc = eol ? eol + 1 : eoc;
1530        }
1531}
1532
1533static struct command *read_head_info(struct oid_array *shallow)
1534{
1535        struct command *commands = NULL;
1536        struct command **p = &commands;
1537        for (;;) {
1538                char *line;
1539                int len, linelen;
1540
1541                line = packet_read_line(0, &len);
1542                if (!line)
1543                        break;
1544
1545                if (len > 8 && starts_with(line, "shallow ")) {
1546                        struct object_id oid;
1547                        if (get_oid_hex(line + 8, &oid))
1548                                die("protocol error: expected shallow sha, got '%s'",
1549                                    line + 8);
1550                        oid_array_append(shallow, &oid);
1551                        continue;
1552                }
1553
1554                linelen = strlen(line);
1555                if (linelen < len) {
1556                        const char *feature_list = line + linelen + 1;
1557                        if (parse_feature_request(feature_list, "report-status"))
1558                                report_status = 1;
1559                        if (parse_feature_request(feature_list, "side-band-64k"))
1560                                use_sideband = LARGE_PACKET_MAX;
1561                        if (parse_feature_request(feature_list, "quiet"))
1562                                quiet = 1;
1563                        if (advertise_atomic_push
1564                            && parse_feature_request(feature_list, "atomic"))
1565                                use_atomic = 1;
1566                        if (advertise_push_options
1567                            && parse_feature_request(feature_list, "push-options"))
1568                                use_push_options = 1;
1569                }
1570
1571                if (!strcmp(line, "push-cert")) {
1572                        int true_flush = 0;
1573                        char certbuf[1024];
1574
1575                        for (;;) {
1576                                len = packet_read(0, NULL, NULL,
1577                                                  certbuf, sizeof(certbuf), 0);
1578                                if (!len) {
1579                                        true_flush = 1;
1580                                        break;
1581                                }
1582                                if (!strcmp(certbuf, "push-cert-end\n"))
1583                                        break; /* end of cert */
1584                                strbuf_addstr(&push_cert, certbuf);
1585                        }
1586
1587                        if (true_flush)
1588                                break;
1589                        continue;
1590                }
1591
1592                p = queue_command(p, line, linelen);
1593        }
1594
1595        if (push_cert.len)
1596                queue_commands_from_cert(p, &push_cert);
1597
1598        return commands;
1599}
1600
1601static void read_push_options(struct string_list *options)
1602{
1603        while (1) {
1604                char *line;
1605                int len;
1606
1607                line = packet_read_line(0, &len);
1608
1609                if (!line)
1610                        break;
1611
1612                string_list_append(options, line);
1613        }
1614}
1615
1616static const char *parse_pack_header(struct pack_header *hdr)
1617{
1618        switch (read_pack_header(0, hdr)) {
1619        case PH_ERROR_EOF:
1620                return "eof before pack header was fully read";
1621
1622        case PH_ERROR_PACK_SIGNATURE:
1623                return "protocol error (pack signature mismatch detected)";
1624
1625        case PH_ERROR_PROTOCOL:
1626                return "protocol error (pack version unsupported)";
1627
1628        default:
1629                return "unknown error in parse_pack_header";
1630
1631        case 0:
1632                return NULL;
1633        }
1634}
1635
1636static const char *pack_lockfile;
1637
1638static void push_header_arg(struct argv_array *args, struct pack_header *hdr)
1639{
1640        argv_array_pushf(args, "--pack_header=%"PRIu32",%"PRIu32,
1641                        ntohl(hdr->hdr_version), ntohl(hdr->hdr_entries));
1642}
1643
1644static const char *unpack(int err_fd, struct shallow_info *si)
1645{
1646        struct pack_header hdr;
1647        const char *hdr_err;
1648        int status;
1649        struct child_process child = CHILD_PROCESS_INIT;
1650        int fsck_objects = (receive_fsck_objects >= 0
1651                            ? receive_fsck_objects
1652                            : transfer_fsck_objects >= 0
1653                            ? transfer_fsck_objects
1654                            : 0);
1655
1656        hdr_err = parse_pack_header(&hdr);
1657        if (hdr_err) {
1658                if (err_fd > 0)
1659                        close(err_fd);
1660                return hdr_err;
1661        }
1662
1663        if (si->nr_ours || si->nr_theirs) {
1664                alt_shallow_file = setup_temporary_shallow(si->shallow);
1665                argv_array_push(&child.args, "--shallow-file");
1666                argv_array_push(&child.args, alt_shallow_file);
1667        }
1668
1669        tmp_objdir = tmp_objdir_create();
1670        if (!tmp_objdir) {
1671                if (err_fd > 0)
1672                        close(err_fd);
1673                return "unable to create temporary object directory";
1674        }
1675        child.env = tmp_objdir_env(tmp_objdir);
1676
1677        /*
1678         * Normally we just pass the tmp_objdir environment to the child
1679         * processes that do the heavy lifting, but we may need to see these
1680         * objects ourselves to set up shallow information.
1681         */
1682        tmp_objdir_add_as_alternate(tmp_objdir);
1683
1684        if (ntohl(hdr.hdr_entries) < unpack_limit) {
1685                argv_array_push(&child.args, "unpack-objects");
1686                push_header_arg(&child.args, &hdr);
1687                if (quiet)
1688                        argv_array_push(&child.args, "-q");
1689                if (fsck_objects)
1690                        argv_array_pushf(&child.args, "--strict%s",
1691                                fsck_msg_types.buf);
1692                if (max_input_size)
1693                        argv_array_pushf(&child.args, "--max-input-size=%"PRIuMAX,
1694                                (uintmax_t)max_input_size);
1695                child.no_stdout = 1;
1696                child.err = err_fd;
1697                child.git_cmd = 1;
1698                status = run_command(&child);
1699                if (status)
1700                        return "unpack-objects abnormal exit";
1701        } else {
1702                char hostname[HOST_NAME_MAX + 1];
1703
1704                argv_array_pushl(&child.args, "index-pack", "--stdin", NULL);
1705                push_header_arg(&child.args, &hdr);
1706
1707                if (xgethostname(hostname, sizeof(hostname)))
1708                        xsnprintf(hostname, sizeof(hostname), "localhost");
1709                argv_array_pushf(&child.args,
1710                                 "--keep=receive-pack %"PRIuMAX" on %s",
1711                                 (uintmax_t)getpid(),
1712                                 hostname);
1713
1714                if (!quiet && err_fd)
1715                        argv_array_push(&child.args, "--show-resolving-progress");
1716                if (use_sideband)
1717                        argv_array_push(&child.args, "--report-end-of-input");
1718                if (fsck_objects)
1719                        argv_array_pushf(&child.args, "--strict%s",
1720                                fsck_msg_types.buf);
1721                if (!reject_thin)
1722                        argv_array_push(&child.args, "--fix-thin");
1723                if (max_input_size)
1724                        argv_array_pushf(&child.args, "--max-input-size=%"PRIuMAX,
1725                                (uintmax_t)max_input_size);
1726                child.out = -1;
1727                child.err = err_fd;
1728                child.git_cmd = 1;
1729                status = start_command(&child);
1730                if (status)
1731                        return "index-pack fork failed";
1732                pack_lockfile = index_pack_lockfile(child.out);
1733                close(child.out);
1734                status = finish_command(&child);
1735                if (status)
1736                        return "index-pack abnormal exit";
1737                reprepare_packed_git();
1738        }
1739        return NULL;
1740}
1741
1742static const char *unpack_with_sideband(struct shallow_info *si)
1743{
1744        struct async muxer;
1745        const char *ret;
1746
1747        if (!use_sideband)
1748                return unpack(0, si);
1749
1750        use_keepalive = KEEPALIVE_AFTER_NUL;
1751        memset(&muxer, 0, sizeof(muxer));
1752        muxer.proc = copy_to_sideband;
1753        muxer.in = -1;
1754        if (start_async(&muxer))
1755                return NULL;
1756
1757        ret = unpack(muxer.in, si);
1758
1759        finish_async(&muxer);
1760        return ret;
1761}
1762
1763static void prepare_shallow_update(struct command *commands,
1764                                   struct shallow_info *si)
1765{
1766        int i, j, k, bitmap_size = (si->ref->nr + 31) / 32;
1767
1768        ALLOC_ARRAY(si->used_shallow, si->shallow->nr);
1769        assign_shallow_commits_to_refs(si, si->used_shallow, NULL);
1770
1771        si->need_reachability_test =
1772                xcalloc(si->shallow->nr, sizeof(*si->need_reachability_test));
1773        si->reachable =
1774                xcalloc(si->shallow->nr, sizeof(*si->reachable));
1775        si->shallow_ref = xcalloc(si->ref->nr, sizeof(*si->shallow_ref));
1776
1777        for (i = 0; i < si->nr_ours; i++)
1778                si->need_reachability_test[si->ours[i]] = 1;
1779
1780        for (i = 0; i < si->shallow->nr; i++) {
1781                if (!si->used_shallow[i])
1782                        continue;
1783                for (j = 0; j < bitmap_size; j++) {
1784                        if (!si->used_shallow[i][j])
1785                                continue;
1786                        si->need_reachability_test[i]++;
1787                        for (k = 0; k < 32; k++)
1788                                if (si->used_shallow[i][j] & (1U << k))
1789                                        si->shallow_ref[j * 32 + k]++;
1790                }
1791
1792                /*
1793                 * true for those associated with some refs and belong
1794                 * in "ours" list aka "step 7 not done yet"
1795                 */
1796                si->need_reachability_test[i] =
1797                        si->need_reachability_test[i] > 1;
1798        }
1799
1800        /*
1801         * keep hooks happy by forcing a temporary shallow file via
1802         * env variable because we can't add --shallow-file to every
1803         * command. check_everything_connected() will be done with
1804         * true .git/shallow though.
1805         */
1806        setenv(GIT_SHALLOW_FILE_ENVIRONMENT, alt_shallow_file, 1);
1807}
1808
1809static void update_shallow_info(struct command *commands,
1810                                struct shallow_info *si,
1811                                struct oid_array *ref)
1812{
1813        struct command *cmd;
1814        int *ref_status;
1815        remove_nonexistent_theirs_shallow(si);
1816        if (!si->nr_ours && !si->nr_theirs) {
1817                shallow_update = 0;
1818                return;
1819        }
1820
1821        for (cmd = commands; cmd; cmd = cmd->next) {
1822                if (is_null_oid(&cmd->new_oid))
1823                        continue;
1824                oid_array_append(ref, &cmd->new_oid);
1825                cmd->index = ref->nr - 1;
1826        }
1827        si->ref = ref;
1828
1829        if (shallow_update) {
1830                prepare_shallow_update(commands, si);
1831                return;
1832        }
1833
1834        ALLOC_ARRAY(ref_status, ref->nr);
1835        assign_shallow_commits_to_refs(si, NULL, ref_status);
1836        for (cmd = commands; cmd; cmd = cmd->next) {
1837                if (is_null_oid(&cmd->new_oid))
1838                        continue;
1839                if (ref_status[cmd->index]) {
1840                        cmd->error_string = "shallow update not allowed";
1841                        cmd->skip_update = 1;
1842                }
1843        }
1844        free(ref_status);
1845}
1846
1847static void report(struct command *commands, const char *unpack_status)
1848{
1849        struct command *cmd;
1850        struct strbuf buf = STRBUF_INIT;
1851
1852        packet_buf_write(&buf, "unpack %s\n",
1853                         unpack_status ? unpack_status : "ok");
1854        for (cmd = commands; cmd; cmd = cmd->next) {
1855                if (!cmd->error_string)
1856                        packet_buf_write(&buf, "ok %s\n",
1857                                         cmd->ref_name);
1858                else
1859                        packet_buf_write(&buf, "ng %s %s\n",
1860                                         cmd->ref_name, cmd->error_string);
1861        }
1862        packet_buf_flush(&buf);
1863
1864        if (use_sideband)
1865                send_sideband(1, 1, buf.buf, buf.len, use_sideband);
1866        else
1867                write_or_die(1, buf.buf, buf.len);
1868        strbuf_release(&buf);
1869}
1870
1871static int delete_only(struct command *commands)
1872{
1873        struct command *cmd;
1874        for (cmd = commands; cmd; cmd = cmd->next) {
1875                if (!is_null_oid(&cmd->new_oid))
1876                        return 0;
1877        }
1878        return 1;
1879}
1880
1881int cmd_receive_pack(int argc, const char **argv, const char *prefix)
1882{
1883        int advertise_refs = 0;
1884        struct command *commands;
1885        struct oid_array shallow = OID_ARRAY_INIT;
1886        struct oid_array ref = OID_ARRAY_INIT;
1887        struct shallow_info si;
1888
1889        struct option options[] = {
1890                OPT__QUIET(&quiet, N_("quiet")),
1891                OPT_HIDDEN_BOOL(0, "stateless-rpc", &stateless_rpc, NULL),
1892                OPT_HIDDEN_BOOL(0, "advertise-refs", &advertise_refs, NULL),
1893                OPT_HIDDEN_BOOL(0, "reject-thin-pack-for-testing", &reject_thin, NULL),
1894                OPT_END()
1895        };
1896
1897        packet_trace_identity("receive-pack");
1898
1899        argc = parse_options(argc, argv, prefix, options, receive_pack_usage, 0);
1900
1901        if (argc > 1)
1902                usage_msg_opt(_("Too many arguments."), receive_pack_usage, options);
1903        if (argc == 0)
1904                usage_msg_opt(_("You must specify a directory."), receive_pack_usage, options);
1905
1906        service_dir = argv[0];
1907
1908        setup_path();
1909
1910        if (!enter_repo(service_dir, 0))
1911                die("'%s' does not appear to be a git repository", service_dir);
1912
1913        git_config(receive_pack_config, NULL);
1914        if (cert_nonce_seed)
1915                push_cert_nonce = prepare_push_cert_nonce(service_dir, time(NULL));
1916
1917        if (0 <= transfer_unpack_limit)
1918                unpack_limit = transfer_unpack_limit;
1919        else if (0 <= receive_unpack_limit)
1920                unpack_limit = receive_unpack_limit;
1921
1922        if (advertise_refs || !stateless_rpc) {
1923                write_head_info();
1924        }
1925        if (advertise_refs)
1926                return 0;
1927
1928        if ((commands = read_head_info(&shallow)) != NULL) {
1929                const char *unpack_status = NULL;
1930                struct string_list push_options = STRING_LIST_INIT_DUP;
1931
1932                if (use_push_options)
1933                        read_push_options(&push_options);
1934
1935                prepare_shallow_info(&si, &shallow);
1936                if (!si.nr_ours && !si.nr_theirs)
1937                        shallow_update = 0;
1938                if (!delete_only(commands)) {
1939                        unpack_status = unpack_with_sideband(&si);
1940                        update_shallow_info(commands, &si, &ref);
1941                }
1942                use_keepalive = KEEPALIVE_ALWAYS;
1943                execute_commands(commands, unpack_status, &si,
1944                                 &push_options);
1945                if (pack_lockfile)
1946                        unlink_or_warn(pack_lockfile);
1947                if (report_status)
1948                        report(commands, unpack_status);
1949                run_receive_hook(commands, "post-receive", 1,
1950                                 &push_options);
1951                run_update_post_hook(commands);
1952                string_list_clear(&push_options, 0);
1953                if (auto_gc) {
1954                        const char *argv_gc_auto[] = {
1955                                "gc", "--auto", "--quiet", NULL,
1956                        };
1957                        struct child_process proc = CHILD_PROCESS_INIT;
1958
1959                        proc.no_stdin = 1;
1960                        proc.stdout_to_stderr = 1;
1961                        proc.err = use_sideband ? -1 : 0;
1962                        proc.git_cmd = 1;
1963                        proc.argv = argv_gc_auto;
1964
1965                        close_all_packs();
1966                        if (!start_command(&proc)) {
1967                                if (use_sideband)
1968                                        copy_to_sideband(proc.err, -1, NULL);
1969                                finish_command(&proc);
1970                        }
1971                }
1972                if (auto_update_server_info)
1973                        update_server_info(0);
1974                clear_shallow_info(&si);
1975        }
1976        if (use_sideband)
1977                packet_flush(1);
1978        oid_array_clear(&shallow);
1979        oid_array_clear(&ref);
1980        free((void *)push_cert_nonce);
1981        return 0;
1982}