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