1#include "builtin.h"
2#include "pack.h"
3#include "refs.h"
4#include "pkt-line.h"
5#include "sideband.h"
6#include "run-command.h"
7#include "exec_cmd.h"
8#include "commit.h"
9#include "object.h"
10#include "remote.h"
11#include "connect.h"
12#include "transport.h"
13#include "string-list.h"
14#include "sha1-array.h"
15#include "connected.h"
16#include "argv-array.h"
17#include "version.h"
18#include "tag.h"
19#include "gpg-interface.h"
20
21static const char receive_pack_usage[] = "git receive-pack <git-dir>";
22
23enum deny_action {
24 DENY_UNCONFIGURED,
25 DENY_IGNORE,
26 DENY_WARN,
27 DENY_REFUSE
28};
29
30static int deny_deletes;
31static int deny_non_fast_forwards;
32static enum deny_action deny_current_branch = DENY_UNCONFIGURED;
33static enum deny_action deny_delete_current = DENY_UNCONFIGURED;
34static int receive_fsck_objects = -1;
35static int transfer_fsck_objects = -1;
36static int receive_unpack_limit = -1;
37static int transfer_unpack_limit = -1;
38static int unpack_limit = 100;
39static int report_status;
40static int use_sideband;
41static int quiet;
42static int prefer_ofs_delta = 1;
43static int auto_update_server_info;
44static int auto_gc = 1;
45static int fix_thin = 1;
46static const char *head_name;
47static void *head_name_to_free;
48static int sent_capabilities;
49static int shallow_update;
50static const char *alt_shallow_file;
51static struct strbuf push_cert = STRBUF_INIT;
52static unsigned char push_cert_sha1[20];
53static struct signature_check sigcheck;
54static const char *push_cert_nonce;
55static const char *cert_nonce_seed;
56
57static const char *NONCE_UNSOLICITED = "UNSOLICITED";
58static const char *NONCE_BAD = "BAD";
59static const char *NONCE_MISSING = "MISSING";
60static const char *NONCE_OK = "OK";
61static const char *nonce_status;
62
63static enum deny_action parse_deny_action(const char *var, const char *value)
64{
65 if (value) {
66 if (!strcasecmp(value, "ignore"))
67 return DENY_IGNORE;
68 if (!strcasecmp(value, "warn"))
69 return DENY_WARN;
70 if (!strcasecmp(value, "refuse"))
71 return DENY_REFUSE;
72 }
73 if (git_config_bool(var, value))
74 return DENY_REFUSE;
75 return DENY_IGNORE;
76}
77
78static int receive_pack_config(const char *var, const char *value, void *cb)
79{
80 int status = parse_hide_refs_config(var, value, "receive");
81
82 if (status)
83 return status;
84
85 if (strcmp(var, "receive.denydeletes") == 0) {
86 deny_deletes = git_config_bool(var, value);
87 return 0;
88 }
89
90 if (strcmp(var, "receive.denynonfastforwards") == 0) {
91 deny_non_fast_forwards = git_config_bool(var, value);
92 return 0;
93 }
94
95 if (strcmp(var, "receive.unpacklimit") == 0) {
96 receive_unpack_limit = git_config_int(var, value);
97 return 0;
98 }
99
100 if (strcmp(var, "transfer.unpacklimit") == 0) {
101 transfer_unpack_limit = git_config_int(var, value);
102 return 0;
103 }
104
105 if (strcmp(var, "receive.fsckobjects") == 0) {
106 receive_fsck_objects = git_config_bool(var, value);
107 return 0;
108 }
109
110 if (strcmp(var, "transfer.fsckobjects") == 0) {
111 transfer_fsck_objects = git_config_bool(var, value);
112 return 0;
113 }
114
115 if (!strcmp(var, "receive.denycurrentbranch")) {
116 deny_current_branch = parse_deny_action(var, value);
117 return 0;
118 }
119
120 if (strcmp(var, "receive.denydeletecurrent") == 0) {
121 deny_delete_current = parse_deny_action(var, value);
122 return 0;
123 }
124
125 if (strcmp(var, "repack.usedeltabaseoffset") == 0) {
126 prefer_ofs_delta = git_config_bool(var, value);
127 return 0;
128 }
129
130 if (strcmp(var, "receive.updateserverinfo") == 0) {
131 auto_update_server_info = git_config_bool(var, value);
132 return 0;
133 }
134
135 if (strcmp(var, "receive.autogc") == 0) {
136 auto_gc = git_config_bool(var, value);
137 return 0;
138 }
139
140 if (strcmp(var, "receive.shallowupdate") == 0) {
141 shallow_update = git_config_bool(var, value);
142 return 0;
143 }
144
145 if (strcmp(var, "receive.certnonceseed") == 0)
146 return git_config_string(&cert_nonce_seed, var, value);
147
148 return git_default_config(var, value, cb);
149}
150
151static void show_ref(const char *path, const unsigned char *sha1)
152{
153 if (ref_is_hidden(path))
154 return;
155
156 if (sent_capabilities) {
157 packet_write(1, "%s %s\n", sha1_to_hex(sha1), path);
158 } else {
159 struct strbuf cap = STRBUF_INIT;
160
161 strbuf_addstr(&cap,
162 "report-status delete-refs side-band-64k quiet");
163 if (prefer_ofs_delta)
164 strbuf_addstr(&cap, " ofs-delta");
165 if (push_cert_nonce)
166 strbuf_addf(&cap, " push-cert=%s", push_cert_nonce);
167 strbuf_addf(&cap, " agent=%s", git_user_agent_sanitized());
168 packet_write(1, "%s %s%c%s\n",
169 sha1_to_hex(sha1), path, 0, cap.buf);
170 strbuf_release(&cap);
171 sent_capabilities = 1;
172 }
173}
174
175static int show_ref_cb(const char *path, const unsigned char *sha1, int flag, void *unused)
176{
177 path = strip_namespace(path);
178 /*
179 * Advertise refs outside our current namespace as ".have"
180 * refs, so that the client can use them to minimize data
181 * transfer but will otherwise ignore them. This happens to
182 * cover ".have" that are thrown in by add_one_alternate_ref()
183 * to mark histories that are complete in our alternates as
184 * well.
185 */
186 if (!path)
187 path = ".have";
188 show_ref(path, sha1);
189 return 0;
190}
191
192static void show_one_alternate_sha1(const unsigned char sha1[20], void *unused)
193{
194 show_ref(".have", sha1);
195}
196
197static void collect_one_alternate_ref(const struct ref *ref, void *data)
198{
199 struct sha1_array *sa = data;
200 sha1_array_append(sa, ref->old_sha1);
201}
202
203static void write_head_info(void)
204{
205 struct sha1_array sa = SHA1_ARRAY_INIT;
206 for_each_alternate_ref(collect_one_alternate_ref, &sa);
207 sha1_array_for_each_unique(&sa, show_one_alternate_sha1, NULL);
208 sha1_array_clear(&sa);
209 for_each_ref(show_ref_cb, NULL);
210 if (!sent_capabilities)
211 show_ref("capabilities^{}", null_sha1);
212
213 advertise_shallow_grafts(1);
214
215 /* EOF */
216 packet_flush(1);
217}
218
219struct command {
220 struct command *next;
221 const char *error_string;
222 unsigned int skip_update:1,
223 did_not_exist:1;
224 int index;
225 unsigned char old_sha1[20];
226 unsigned char new_sha1[20];
227 char ref_name[FLEX_ARRAY]; /* more */
228};
229
230static void rp_error(const char *err, ...) __attribute__((format (printf, 1, 2)));
231static void rp_warning(const char *err, ...) __attribute__((format (printf, 1, 2)));
232
233static void report_message(const char *prefix, const char *err, va_list params)
234{
235 int sz = strlen(prefix);
236 char msg[4096];
237
238 strncpy(msg, prefix, sz);
239 sz += vsnprintf(msg + sz, sizeof(msg) - sz, err, params);
240 if (sz > (sizeof(msg) - 1))
241 sz = sizeof(msg) - 1;
242 msg[sz++] = '\n';
243
244 if (use_sideband)
245 send_sideband(1, 2, msg, sz, use_sideband);
246 else
247 xwrite(2, msg, sz);
248}
249
250static void rp_warning(const char *err, ...)
251{
252 va_list params;
253 va_start(params, err);
254 report_message("warning: ", err, params);
255 va_end(params);
256}
257
258static void rp_error(const char *err, ...)
259{
260 va_list params;
261 va_start(params, err);
262 report_message("error: ", err, params);
263 va_end(params);
264}
265
266static int copy_to_sideband(int in, int out, void *arg)
267{
268 char data[128];
269 while (1) {
270 ssize_t sz = xread(in, data, sizeof(data));
271 if (sz <= 0)
272 break;
273 send_sideband(1, 2, data, sz, use_sideband);
274 }
275 close(in);
276 return 0;
277}
278
279#define HMAC_BLOCK_SIZE 64
280
281static void hmac_sha1(unsigned char out[20],
282 const char *key_in, size_t key_len,
283 const char *text, size_t text_len)
284{
285 unsigned char key[HMAC_BLOCK_SIZE];
286 unsigned char k_ipad[HMAC_BLOCK_SIZE];
287 unsigned char k_opad[HMAC_BLOCK_SIZE];
288 int i;
289 git_SHA_CTX ctx;
290
291 /* RFC 2104 2. (1) */
292 memset(key, '\0', HMAC_BLOCK_SIZE);
293 if (HMAC_BLOCK_SIZE < key_len) {
294 git_SHA1_Init(&ctx);
295 git_SHA1_Update(&ctx, key_in, key_len);
296 git_SHA1_Final(key, &ctx);
297 } else {
298 memcpy(key, key_in, key_len);
299 }
300
301 /* RFC 2104 2. (2) & (5) */
302 for (i = 0; i < sizeof(key); i++) {
303 k_ipad[i] = key[i] ^ 0x36;
304 k_opad[i] = key[i] ^ 0x5c;
305 }
306
307 /* RFC 2104 2. (3) & (4) */
308 git_SHA1_Init(&ctx);
309 git_SHA1_Update(&ctx, k_ipad, sizeof(k_ipad));
310 git_SHA1_Update(&ctx, text, text_len);
311 git_SHA1_Final(out, &ctx);
312
313 /* RFC 2104 2. (6) & (7) */
314 git_SHA1_Init(&ctx);
315 git_SHA1_Update(&ctx, k_opad, sizeof(k_opad));
316 git_SHA1_Update(&ctx, out, sizeof(out));
317 git_SHA1_Final(out, &ctx);
318}
319
320static char *prepare_push_cert_nonce(const char *path, unsigned long stamp)
321{
322 struct strbuf buf = STRBUF_INIT;
323 unsigned char sha1[20];
324
325 strbuf_addf(&buf, "%s:%lu", path, stamp);
326 hmac_sha1(sha1, buf.buf, buf.len, cert_nonce_seed, strlen(cert_nonce_seed));;
327 strbuf_release(&buf);
328
329 /* RFC 2104 5. HMAC-SHA1-80 */
330 strbuf_addf(&buf, "%lu-%.*s", stamp, 20, sha1_to_hex(sha1));
331 return strbuf_detach(&buf, NULL);
332}
333
334/*
335 * NEEDSWORK: reuse find_commit_header() from jk/commit-author-parsing
336 * after dropping "_commit" from its name and possibly moving it out
337 * of commit.c
338 */
339static char *find_header(const char *msg, size_t len, const char *key)
340{
341 int key_len = strlen(key);
342 const char *line = msg;
343
344 while (line && line < msg + len) {
345 const char *eol = strchrnul(line, '\n');
346
347 if ((msg + len <= eol) || line == eol)
348 return NULL;
349 if (line + key_len < eol &&
350 !memcmp(line, key, key_len) && line[key_len] == ' ') {
351 int offset = key_len + 1;
352 return xmemdupz(line + offset, (eol - line) - offset);
353 }
354 line = *eol ? eol + 1 : NULL;
355 }
356 return NULL;
357}
358
359static const char *check_nonce(const char *buf, size_t len)
360{
361 char *nonce = find_header(buf, len, "nonce");
362 const char *retval = NONCE_BAD;
363
364 if (!nonce) {
365 retval = NONCE_MISSING;
366 goto leave;
367 } else if (!push_cert_nonce) {
368 retval = NONCE_UNSOLICITED;
369 goto leave;
370 } else if (!strcmp(push_cert_nonce, nonce)) {
371 retval = NONCE_OK;
372 goto leave;
373 }
374
375 /* returned nonce MUST match what we gave out earlier */
376 retval = NONCE_BAD;
377
378leave:
379 free(nonce);
380 return retval;
381}
382
383static void prepare_push_cert_sha1(struct child_process *proc)
384{
385 static int already_done;
386 struct argv_array env = ARGV_ARRAY_INIT;
387
388 if (!push_cert.len)
389 return;
390
391 if (!already_done) {
392 struct strbuf gpg_output = STRBUF_INIT;
393 struct strbuf gpg_status = STRBUF_INIT;
394 int bogs /* beginning_of_gpg_sig */;
395
396 already_done = 1;
397 if (write_sha1_file(push_cert.buf, push_cert.len, "blob", push_cert_sha1))
398 hashclr(push_cert_sha1);
399
400 memset(&sigcheck, '\0', sizeof(sigcheck));
401 sigcheck.result = 'N';
402
403 bogs = parse_signature(push_cert.buf, push_cert.len);
404 if (verify_signed_buffer(push_cert.buf, bogs,
405 push_cert.buf + bogs, push_cert.len - bogs,
406 &gpg_output, &gpg_status) < 0) {
407 ; /* error running gpg */
408 } else {
409 sigcheck.payload = push_cert.buf;
410 sigcheck.gpg_output = gpg_output.buf;
411 sigcheck.gpg_status = gpg_status.buf;
412 parse_gpg_output(&sigcheck);
413 }
414
415 strbuf_release(&gpg_output);
416 strbuf_release(&gpg_status);
417 nonce_status = check_nonce(push_cert.buf, bogs);
418 }
419 if (!is_null_sha1(push_cert_sha1)) {
420 argv_array_pushf(&env, "GIT_PUSH_CERT=%s", sha1_to_hex(push_cert_sha1));
421 argv_array_pushf(&env, "GIT_PUSH_CERT_SIGNER=%s",
422 sigcheck.signer ? sigcheck.signer : "");
423 argv_array_pushf(&env, "GIT_PUSH_CERT_KEY=%s",
424 sigcheck.key ? sigcheck.key : "");
425 argv_array_pushf(&env, "GIT_PUSH_CERT_STATUS=%c", sigcheck.result);
426 if (push_cert_nonce) {
427 argv_array_pushf(&env, "GIT_PUSH_CERT_NONCE=%s", push_cert_nonce);
428 argv_array_pushf(&env, "GIT_PUSH_CERT_NONCE_STATUS=%s", nonce_status);
429 }
430 proc->env = env.argv;
431 }
432}
433
434typedef int (*feed_fn)(void *, const char **, size_t *);
435static int run_and_feed_hook(const char *hook_name, feed_fn feed, void *feed_state)
436{
437 struct child_process proc;
438 struct async muxer;
439 const char *argv[2];
440 int code;
441
442 argv[0] = find_hook(hook_name);
443 if (!argv[0])
444 return 0;
445
446 argv[1] = NULL;
447
448 memset(&proc, 0, sizeof(proc));
449 proc.argv = argv;
450 proc.in = -1;
451 proc.stdout_to_stderr = 1;
452
453 prepare_push_cert_sha1(&proc);
454
455 if (use_sideband) {
456 memset(&muxer, 0, sizeof(muxer));
457 muxer.proc = copy_to_sideband;
458 muxer.in = -1;
459 code = start_async(&muxer);
460 if (code)
461 return code;
462 proc.err = muxer.in;
463 }
464
465 code = start_command(&proc);
466 if (code) {
467 if (use_sideband)
468 finish_async(&muxer);
469 return code;
470 }
471
472 while (1) {
473 const char *buf;
474 size_t n;
475 if (feed(feed_state, &buf, &n))
476 break;
477 if (write_in_full(proc.in, buf, n) != n)
478 break;
479 }
480 close(proc.in);
481 if (use_sideband)
482 finish_async(&muxer);
483 return finish_command(&proc);
484}
485
486struct receive_hook_feed_state {
487 struct command *cmd;
488 int skip_broken;
489 struct strbuf buf;
490};
491
492static int feed_receive_hook(void *state_, const char **bufp, size_t *sizep)
493{
494 struct receive_hook_feed_state *state = state_;
495 struct command *cmd = state->cmd;
496
497 while (cmd &&
498 state->skip_broken && (cmd->error_string || cmd->did_not_exist))
499 cmd = cmd->next;
500 if (!cmd)
501 return -1; /* EOF */
502 strbuf_reset(&state->buf);
503 strbuf_addf(&state->buf, "%s %s %s\n",
504 sha1_to_hex(cmd->old_sha1), sha1_to_hex(cmd->new_sha1),
505 cmd->ref_name);
506 state->cmd = cmd->next;
507 if (bufp) {
508 *bufp = state->buf.buf;
509 *sizep = state->buf.len;
510 }
511 return 0;
512}
513
514static int run_receive_hook(struct command *commands, const char *hook_name,
515 int skip_broken)
516{
517 struct receive_hook_feed_state state;
518 int status;
519
520 strbuf_init(&state.buf, 0);
521 state.cmd = commands;
522 state.skip_broken = skip_broken;
523 if (feed_receive_hook(&state, NULL, NULL))
524 return 0;
525 state.cmd = commands;
526 status = run_and_feed_hook(hook_name, feed_receive_hook, &state);
527 strbuf_release(&state.buf);
528 return status;
529}
530
531static int run_update_hook(struct command *cmd)
532{
533 const char *argv[5];
534 struct child_process proc;
535 int code;
536
537 argv[0] = find_hook("update");
538 if (!argv[0])
539 return 0;
540
541 argv[1] = cmd->ref_name;
542 argv[2] = sha1_to_hex(cmd->old_sha1);
543 argv[3] = sha1_to_hex(cmd->new_sha1);
544 argv[4] = NULL;
545
546 memset(&proc, 0, sizeof(proc));
547 proc.no_stdin = 1;
548 proc.stdout_to_stderr = 1;
549 proc.err = use_sideband ? -1 : 0;
550 proc.argv = argv;
551
552 code = start_command(&proc);
553 if (code)
554 return code;
555 if (use_sideband)
556 copy_to_sideband(proc.err, -1, NULL);
557 return finish_command(&proc);
558}
559
560static int is_ref_checked_out(const char *ref)
561{
562 if (is_bare_repository())
563 return 0;
564
565 if (!head_name)
566 return 0;
567 return !strcmp(head_name, ref);
568}
569
570static char *refuse_unconfigured_deny_msg[] = {
571 "By default, updating the current branch in a non-bare repository",
572 "is denied, because it will make the index and work tree inconsistent",
573 "with what you pushed, and will require 'git reset --hard' to match",
574 "the work tree to HEAD.",
575 "",
576 "You can set 'receive.denyCurrentBranch' configuration variable to",
577 "'ignore' or 'warn' in the remote repository to allow pushing into",
578 "its current branch; however, this is not recommended unless you",
579 "arranged to update its work tree to match what you pushed in some",
580 "other way.",
581 "",
582 "To squelch this message and still keep the default behaviour, set",
583 "'receive.denyCurrentBranch' configuration variable to 'refuse'."
584};
585
586static void refuse_unconfigured_deny(void)
587{
588 int i;
589 for (i = 0; i < ARRAY_SIZE(refuse_unconfigured_deny_msg); i++)
590 rp_error("%s", refuse_unconfigured_deny_msg[i]);
591}
592
593static char *refuse_unconfigured_deny_delete_current_msg[] = {
594 "By default, deleting the current branch is denied, because the next",
595 "'git clone' won't result in any file checked out, causing confusion.",
596 "",
597 "You can set 'receive.denyDeleteCurrent' configuration variable to",
598 "'warn' or 'ignore' in the remote repository to allow deleting the",
599 "current branch, with or without a warning message.",
600 "",
601 "To squelch this message, you can set it to 'refuse'."
602};
603
604static void refuse_unconfigured_deny_delete_current(void)
605{
606 int i;
607 for (i = 0;
608 i < ARRAY_SIZE(refuse_unconfigured_deny_delete_current_msg);
609 i++)
610 rp_error("%s", refuse_unconfigured_deny_delete_current_msg[i]);
611}
612
613static int command_singleton_iterator(void *cb_data, unsigned char sha1[20]);
614static int update_shallow_ref(struct command *cmd, struct shallow_info *si)
615{
616 static struct lock_file shallow_lock;
617 struct sha1_array extra = SHA1_ARRAY_INIT;
618 const char *alt_file;
619 uint32_t mask = 1 << (cmd->index % 32);
620 int i;
621
622 trace_printf_key(&trace_shallow,
623 "shallow: update_shallow_ref %s\n", cmd->ref_name);
624 for (i = 0; i < si->shallow->nr; i++)
625 if (si->used_shallow[i] &&
626 (si->used_shallow[i][cmd->index / 32] & mask) &&
627 !delayed_reachability_test(si, i))
628 sha1_array_append(&extra, si->shallow->sha1[i]);
629
630 setup_alternate_shallow(&shallow_lock, &alt_file, &extra);
631 if (check_shallow_connected(command_singleton_iterator,
632 0, cmd, alt_file)) {
633 rollback_lock_file(&shallow_lock);
634 sha1_array_clear(&extra);
635 return -1;
636 }
637
638 commit_lock_file(&shallow_lock);
639
640 /*
641 * Make sure setup_alternate_shallow() for the next ref does
642 * not lose these new roots..
643 */
644 for (i = 0; i < extra.nr; i++)
645 register_shallow(extra.sha1[i]);
646
647 si->shallow_ref[cmd->index] = 0;
648 sha1_array_clear(&extra);
649 return 0;
650}
651
652static const char *update(struct command *cmd, struct shallow_info *si)
653{
654 const char *name = cmd->ref_name;
655 struct strbuf namespaced_name_buf = STRBUF_INIT;
656 const char *namespaced_name;
657 unsigned char *old_sha1 = cmd->old_sha1;
658 unsigned char *new_sha1 = cmd->new_sha1;
659 struct ref_lock *lock;
660
661 /* only refs/... are allowed */
662 if (!starts_with(name, "refs/") || check_refname_format(name + 5, 0)) {
663 rp_error("refusing to create funny ref '%s' remotely", name);
664 return "funny refname";
665 }
666
667 strbuf_addf(&namespaced_name_buf, "%s%s", get_git_namespace(), name);
668 namespaced_name = strbuf_detach(&namespaced_name_buf, NULL);
669
670 if (is_ref_checked_out(namespaced_name)) {
671 switch (deny_current_branch) {
672 case DENY_IGNORE:
673 break;
674 case DENY_WARN:
675 rp_warning("updating the current branch");
676 break;
677 case DENY_REFUSE:
678 case DENY_UNCONFIGURED:
679 rp_error("refusing to update checked out branch: %s", name);
680 if (deny_current_branch == DENY_UNCONFIGURED)
681 refuse_unconfigured_deny();
682 return "branch is currently checked out";
683 }
684 }
685
686 if (!is_null_sha1(new_sha1) && !has_sha1_file(new_sha1)) {
687 error("unpack should have generated %s, "
688 "but I can't find it!", sha1_to_hex(new_sha1));
689 return "bad pack";
690 }
691
692 if (!is_null_sha1(old_sha1) && is_null_sha1(new_sha1)) {
693 if (deny_deletes && starts_with(name, "refs/heads/")) {
694 rp_error("denying ref deletion for %s", name);
695 return "deletion prohibited";
696 }
697
698 if (!strcmp(namespaced_name, head_name)) {
699 switch (deny_delete_current) {
700 case DENY_IGNORE:
701 break;
702 case DENY_WARN:
703 rp_warning("deleting the current branch");
704 break;
705 case DENY_REFUSE:
706 case DENY_UNCONFIGURED:
707 if (deny_delete_current == DENY_UNCONFIGURED)
708 refuse_unconfigured_deny_delete_current();
709 rp_error("refusing to delete the current branch: %s", name);
710 return "deletion of the current branch prohibited";
711 }
712 }
713 }
714
715 if (deny_non_fast_forwards && !is_null_sha1(new_sha1) &&
716 !is_null_sha1(old_sha1) &&
717 starts_with(name, "refs/heads/")) {
718 struct object *old_object, *new_object;
719 struct commit *old_commit, *new_commit;
720
721 old_object = parse_object(old_sha1);
722 new_object = parse_object(new_sha1);
723
724 if (!old_object || !new_object ||
725 old_object->type != OBJ_COMMIT ||
726 new_object->type != OBJ_COMMIT) {
727 error("bad sha1 objects for %s", name);
728 return "bad ref";
729 }
730 old_commit = (struct commit *)old_object;
731 new_commit = (struct commit *)new_object;
732 if (!in_merge_bases(old_commit, new_commit)) {
733 rp_error("denying non-fast-forward %s"
734 " (you should pull first)", name);
735 return "non-fast-forward";
736 }
737 }
738 if (run_update_hook(cmd)) {
739 rp_error("hook declined to update %s", name);
740 return "hook declined";
741 }
742
743 if (is_null_sha1(new_sha1)) {
744 if (!parse_object(old_sha1)) {
745 old_sha1 = NULL;
746 if (ref_exists(name)) {
747 rp_warning("Allowing deletion of corrupt ref.");
748 } else {
749 rp_warning("Deleting a non-existent ref.");
750 cmd->did_not_exist = 1;
751 }
752 }
753 if (delete_ref(namespaced_name, old_sha1, 0)) {
754 rp_error("failed to delete %s", name);
755 return "failed to delete";
756 }
757 return NULL; /* good */
758 }
759 else {
760 if (shallow_update && si->shallow_ref[cmd->index] &&
761 update_shallow_ref(cmd, si))
762 return "shallow error";
763
764 lock = lock_any_ref_for_update(namespaced_name, old_sha1,
765 0, NULL);
766 if (!lock) {
767 rp_error("failed to lock %s", name);
768 return "failed to lock";
769 }
770 if (write_ref_sha1(lock, new_sha1, "push")) {
771 return "failed to write"; /* error() already called */
772 }
773 return NULL; /* good */
774 }
775}
776
777static void run_update_post_hook(struct command *commands)
778{
779 struct command *cmd;
780 int argc;
781 const char **argv;
782 struct child_process proc;
783 char *hook;
784
785 hook = find_hook("post-update");
786 for (argc = 0, cmd = commands; cmd; cmd = cmd->next) {
787 if (cmd->error_string || cmd->did_not_exist)
788 continue;
789 argc++;
790 }
791 if (!argc || !hook)
792 return;
793
794 argv = xmalloc(sizeof(*argv) * (2 + argc));
795 argv[0] = hook;
796
797 for (argc = 1, cmd = commands; cmd; cmd = cmd->next) {
798 if (cmd->error_string || cmd->did_not_exist)
799 continue;
800 argv[argc] = xstrdup(cmd->ref_name);
801 argc++;
802 }
803 argv[argc] = NULL;
804
805 memset(&proc, 0, sizeof(proc));
806 proc.no_stdin = 1;
807 proc.stdout_to_stderr = 1;
808 proc.err = use_sideband ? -1 : 0;
809 proc.argv = argv;
810
811 if (!start_command(&proc)) {
812 if (use_sideband)
813 copy_to_sideband(proc.err, -1, NULL);
814 finish_command(&proc);
815 }
816}
817
818static void check_aliased_update(struct command *cmd, struct string_list *list)
819{
820 struct strbuf buf = STRBUF_INIT;
821 const char *dst_name;
822 struct string_list_item *item;
823 struct command *dst_cmd;
824 unsigned char sha1[20];
825 char cmd_oldh[41], cmd_newh[41], dst_oldh[41], dst_newh[41];
826 int flag;
827
828 strbuf_addf(&buf, "%s%s", get_git_namespace(), cmd->ref_name);
829 dst_name = resolve_ref_unsafe(buf.buf, sha1, 0, &flag);
830 strbuf_release(&buf);
831
832 if (!(flag & REF_ISSYMREF))
833 return;
834
835 dst_name = strip_namespace(dst_name);
836 if (!dst_name) {
837 rp_error("refusing update to broken symref '%s'", cmd->ref_name);
838 cmd->skip_update = 1;
839 cmd->error_string = "broken symref";
840 return;
841 }
842
843 if ((item = string_list_lookup(list, dst_name)) == NULL)
844 return;
845
846 cmd->skip_update = 1;
847
848 dst_cmd = (struct command *) item->util;
849
850 if (!hashcmp(cmd->old_sha1, dst_cmd->old_sha1) &&
851 !hashcmp(cmd->new_sha1, dst_cmd->new_sha1))
852 return;
853
854 dst_cmd->skip_update = 1;
855
856 strcpy(cmd_oldh, find_unique_abbrev(cmd->old_sha1, DEFAULT_ABBREV));
857 strcpy(cmd_newh, find_unique_abbrev(cmd->new_sha1, DEFAULT_ABBREV));
858 strcpy(dst_oldh, find_unique_abbrev(dst_cmd->old_sha1, DEFAULT_ABBREV));
859 strcpy(dst_newh, find_unique_abbrev(dst_cmd->new_sha1, DEFAULT_ABBREV));
860 rp_error("refusing inconsistent update between symref '%s' (%s..%s) and"
861 " its target '%s' (%s..%s)",
862 cmd->ref_name, cmd_oldh, cmd_newh,
863 dst_cmd->ref_name, dst_oldh, dst_newh);
864
865 cmd->error_string = dst_cmd->error_string =
866 "inconsistent aliased update";
867}
868
869static void check_aliased_updates(struct command *commands)
870{
871 struct command *cmd;
872 struct string_list ref_list = STRING_LIST_INIT_NODUP;
873
874 for (cmd = commands; cmd; cmd = cmd->next) {
875 struct string_list_item *item =
876 string_list_append(&ref_list, cmd->ref_name);
877 item->util = (void *)cmd;
878 }
879 sort_string_list(&ref_list);
880
881 for (cmd = commands; cmd; cmd = cmd->next) {
882 if (!cmd->error_string)
883 check_aliased_update(cmd, &ref_list);
884 }
885
886 string_list_clear(&ref_list, 0);
887}
888
889static int command_singleton_iterator(void *cb_data, unsigned char sha1[20])
890{
891 struct command **cmd_list = cb_data;
892 struct command *cmd = *cmd_list;
893
894 if (!cmd || is_null_sha1(cmd->new_sha1))
895 return -1; /* end of list */
896 *cmd_list = NULL; /* this returns only one */
897 hashcpy(sha1, cmd->new_sha1);
898 return 0;
899}
900
901static void set_connectivity_errors(struct command *commands,
902 struct shallow_info *si)
903{
904 struct command *cmd;
905
906 for (cmd = commands; cmd; cmd = cmd->next) {
907 struct command *singleton = cmd;
908 if (shallow_update && si->shallow_ref[cmd->index])
909 /* to be checked in update_shallow_ref() */
910 continue;
911 if (!check_everything_connected(command_singleton_iterator,
912 0, &singleton))
913 continue;
914 cmd->error_string = "missing necessary objects";
915 }
916}
917
918struct iterate_data {
919 struct command *cmds;
920 struct shallow_info *si;
921};
922
923static int iterate_receive_command_list(void *cb_data, unsigned char sha1[20])
924{
925 struct iterate_data *data = cb_data;
926 struct command **cmd_list = &data->cmds;
927 struct command *cmd = *cmd_list;
928
929 for (; cmd; cmd = cmd->next) {
930 if (shallow_update && data->si->shallow_ref[cmd->index])
931 /* to be checked in update_shallow_ref() */
932 continue;
933 if (!is_null_sha1(cmd->new_sha1) && !cmd->skip_update) {
934 hashcpy(sha1, cmd->new_sha1);
935 *cmd_list = cmd->next;
936 return 0;
937 }
938 }
939 *cmd_list = NULL;
940 return -1; /* end of list */
941}
942
943static void reject_updates_to_hidden(struct command *commands)
944{
945 struct command *cmd;
946
947 for (cmd = commands; cmd; cmd = cmd->next) {
948 if (cmd->error_string || !ref_is_hidden(cmd->ref_name))
949 continue;
950 if (is_null_sha1(cmd->new_sha1))
951 cmd->error_string = "deny deleting a hidden ref";
952 else
953 cmd->error_string = "deny updating a hidden ref";
954 }
955}
956
957static void execute_commands(struct command *commands,
958 const char *unpacker_error,
959 struct shallow_info *si)
960{
961 int checked_connectivity;
962 struct command *cmd;
963 unsigned char sha1[20];
964 struct iterate_data data;
965
966 if (unpacker_error) {
967 for (cmd = commands; cmd; cmd = cmd->next)
968 cmd->error_string = "unpacker error";
969 return;
970 }
971
972 data.cmds = commands;
973 data.si = si;
974 if (check_everything_connected(iterate_receive_command_list, 0, &data))
975 set_connectivity_errors(commands, si);
976
977 reject_updates_to_hidden(commands);
978
979 if (run_receive_hook(commands, "pre-receive", 0)) {
980 for (cmd = commands; cmd; cmd = cmd->next) {
981 if (!cmd->error_string)
982 cmd->error_string = "pre-receive hook declined";
983 }
984 return;
985 }
986
987 check_aliased_updates(commands);
988
989 free(head_name_to_free);
990 head_name = head_name_to_free = resolve_refdup("HEAD", sha1, 0, NULL);
991
992 checked_connectivity = 1;
993 for (cmd = commands; cmd; cmd = cmd->next) {
994 if (cmd->error_string)
995 continue;
996
997 if (cmd->skip_update)
998 continue;
999
1000 cmd->error_string = update(cmd, si);
1001 if (shallow_update && !cmd->error_string &&
1002 si->shallow_ref[cmd->index]) {
1003 error("BUG: connectivity check has not been run on ref %s",
1004 cmd->ref_name);
1005 checked_connectivity = 0;
1006 }
1007 }
1008
1009 if (shallow_update && !checked_connectivity)
1010 error("BUG: run 'git fsck' for safety.\n"
1011 "If there are errors, try to remove "
1012 "the reported refs above");
1013}
1014
1015static struct command **queue_command(struct command **tail,
1016 const char *line,
1017 int linelen)
1018{
1019 unsigned char old_sha1[20], new_sha1[20];
1020 struct command *cmd;
1021 const char *refname;
1022 int reflen;
1023
1024 if (linelen < 83 ||
1025 line[40] != ' ' ||
1026 line[81] != ' ' ||
1027 get_sha1_hex(line, old_sha1) ||
1028 get_sha1_hex(line + 41, new_sha1))
1029 die("protocol error: expected old/new/ref, got '%s'", line);
1030
1031 refname = line + 82;
1032 reflen = linelen - 82;
1033 cmd = xcalloc(1, sizeof(struct command) + reflen + 1);
1034 hashcpy(cmd->old_sha1, old_sha1);
1035 hashcpy(cmd->new_sha1, new_sha1);
1036 memcpy(cmd->ref_name, refname, reflen);
1037 cmd->ref_name[reflen] = '\0';
1038 *tail = cmd;
1039 return &cmd->next;
1040}
1041
1042static void queue_commands_from_cert(struct command **tail,
1043 struct strbuf *push_cert)
1044{
1045 const char *boc, *eoc;
1046
1047 if (*tail)
1048 die("protocol error: got both push certificate and unsigned commands");
1049
1050 boc = strstr(push_cert->buf, "\n\n");
1051 if (!boc)
1052 die("malformed push certificate %.*s", 100, push_cert->buf);
1053 else
1054 boc += 2;
1055 eoc = push_cert->buf + parse_signature(push_cert->buf, push_cert->len);
1056
1057 while (boc < eoc) {
1058 const char *eol = memchr(boc, '\n', eoc - boc);
1059 tail = queue_command(tail, boc, eol ? eol - boc : eoc - eol);
1060 boc = eol ? eol + 1 : eoc;
1061 }
1062}
1063
1064static struct command *read_head_info(struct sha1_array *shallow)
1065{
1066 struct command *commands = NULL;
1067 struct command **p = &commands;
1068 for (;;) {
1069 char *line;
1070 int len, linelen;
1071
1072 line = packet_read_line(0, &len);
1073 if (!line)
1074 break;
1075
1076 if (len == 48 && starts_with(line, "shallow ")) {
1077 unsigned char sha1[20];
1078 if (get_sha1_hex(line + 8, sha1))
1079 die("protocol error: expected shallow sha, got '%s'",
1080 line + 8);
1081 sha1_array_append(shallow, sha1);
1082 continue;
1083 }
1084
1085 linelen = strlen(line);
1086 if (linelen < len) {
1087 const char *feature_list = line + linelen + 1;
1088 if (parse_feature_request(feature_list, "report-status"))
1089 report_status = 1;
1090 if (parse_feature_request(feature_list, "side-band-64k"))
1091 use_sideband = LARGE_PACKET_MAX;
1092 if (parse_feature_request(feature_list, "quiet"))
1093 quiet = 1;
1094 }
1095
1096 if (!strcmp(line, "push-cert")) {
1097 int true_flush = 0;
1098 char certbuf[1024];
1099
1100 for (;;) {
1101 len = packet_read(0, NULL, NULL,
1102 certbuf, sizeof(certbuf), 0);
1103 if (!len) {
1104 true_flush = 1;
1105 break;
1106 }
1107 if (!strcmp(certbuf, "push-cert-end\n"))
1108 break; /* end of cert */
1109 strbuf_addstr(&push_cert, certbuf);
1110 }
1111
1112 if (true_flush)
1113 break;
1114 continue;
1115 }
1116
1117 p = queue_command(p, line, linelen);
1118 }
1119
1120 if (push_cert.len)
1121 queue_commands_from_cert(p, &push_cert);
1122
1123 return commands;
1124}
1125
1126static const char *parse_pack_header(struct pack_header *hdr)
1127{
1128 switch (read_pack_header(0, hdr)) {
1129 case PH_ERROR_EOF:
1130 return "eof before pack header was fully read";
1131
1132 case PH_ERROR_PACK_SIGNATURE:
1133 return "protocol error (pack signature mismatch detected)";
1134
1135 case PH_ERROR_PROTOCOL:
1136 return "protocol error (pack version unsupported)";
1137
1138 default:
1139 return "unknown error in parse_pack_header";
1140
1141 case 0:
1142 return NULL;
1143 }
1144}
1145
1146static const char *pack_lockfile;
1147
1148static const char *unpack(int err_fd, struct shallow_info *si)
1149{
1150 struct pack_header hdr;
1151 struct argv_array av = ARGV_ARRAY_INIT;
1152 const char *hdr_err;
1153 int status;
1154 char hdr_arg[38];
1155 struct child_process child;
1156 int fsck_objects = (receive_fsck_objects >= 0
1157 ? receive_fsck_objects
1158 : transfer_fsck_objects >= 0
1159 ? transfer_fsck_objects
1160 : 0);
1161
1162 hdr_err = parse_pack_header(&hdr);
1163 if (hdr_err) {
1164 if (err_fd > 0)
1165 close(err_fd);
1166 return hdr_err;
1167 }
1168 snprintf(hdr_arg, sizeof(hdr_arg),
1169 "--pack_header=%"PRIu32",%"PRIu32,
1170 ntohl(hdr.hdr_version), ntohl(hdr.hdr_entries));
1171
1172 if (si->nr_ours || si->nr_theirs) {
1173 alt_shallow_file = setup_temporary_shallow(si->shallow);
1174 argv_array_pushl(&av, "--shallow-file", alt_shallow_file, NULL);
1175 }
1176
1177 memset(&child, 0, sizeof(child));
1178 if (ntohl(hdr.hdr_entries) < unpack_limit) {
1179 argv_array_pushl(&av, "unpack-objects", hdr_arg, NULL);
1180 if (quiet)
1181 argv_array_push(&av, "-q");
1182 if (fsck_objects)
1183 argv_array_push(&av, "--strict");
1184 child.argv = av.argv;
1185 child.no_stdout = 1;
1186 child.err = err_fd;
1187 child.git_cmd = 1;
1188 status = run_command(&child);
1189 if (status)
1190 return "unpack-objects abnormal exit";
1191 } else {
1192 int s;
1193 char keep_arg[256];
1194
1195 s = sprintf(keep_arg, "--keep=receive-pack %"PRIuMAX" on ", (uintmax_t) getpid());
1196 if (gethostname(keep_arg + s, sizeof(keep_arg) - s))
1197 strcpy(keep_arg + s, "localhost");
1198
1199 argv_array_pushl(&av, "index-pack",
1200 "--stdin", hdr_arg, keep_arg, NULL);
1201 if (fsck_objects)
1202 argv_array_push(&av, "--strict");
1203 if (fix_thin)
1204 argv_array_push(&av, "--fix-thin");
1205 child.argv = av.argv;
1206 child.out = -1;
1207 child.err = err_fd;
1208 child.git_cmd = 1;
1209 status = start_command(&child);
1210 if (status)
1211 return "index-pack fork failed";
1212 pack_lockfile = index_pack_lockfile(child.out);
1213 close(child.out);
1214 status = finish_command(&child);
1215 if (status)
1216 return "index-pack abnormal exit";
1217 reprepare_packed_git();
1218 }
1219 return NULL;
1220}
1221
1222static const char *unpack_with_sideband(struct shallow_info *si)
1223{
1224 struct async muxer;
1225 const char *ret;
1226
1227 if (!use_sideband)
1228 return unpack(0, si);
1229
1230 memset(&muxer, 0, sizeof(muxer));
1231 muxer.proc = copy_to_sideband;
1232 muxer.in = -1;
1233 if (start_async(&muxer))
1234 return NULL;
1235
1236 ret = unpack(muxer.in, si);
1237
1238 finish_async(&muxer);
1239 return ret;
1240}
1241
1242static void prepare_shallow_update(struct command *commands,
1243 struct shallow_info *si)
1244{
1245 int i, j, k, bitmap_size = (si->ref->nr + 31) / 32;
1246
1247 si->used_shallow = xmalloc(sizeof(*si->used_shallow) *
1248 si->shallow->nr);
1249 assign_shallow_commits_to_refs(si, si->used_shallow, NULL);
1250
1251 si->need_reachability_test =
1252 xcalloc(si->shallow->nr, sizeof(*si->need_reachability_test));
1253 si->reachable =
1254 xcalloc(si->shallow->nr, sizeof(*si->reachable));
1255 si->shallow_ref = xcalloc(si->ref->nr, sizeof(*si->shallow_ref));
1256
1257 for (i = 0; i < si->nr_ours; i++)
1258 si->need_reachability_test[si->ours[i]] = 1;
1259
1260 for (i = 0; i < si->shallow->nr; i++) {
1261 if (!si->used_shallow[i])
1262 continue;
1263 for (j = 0; j < bitmap_size; j++) {
1264 if (!si->used_shallow[i][j])
1265 continue;
1266 si->need_reachability_test[i]++;
1267 for (k = 0; k < 32; k++)
1268 if (si->used_shallow[i][j] & (1 << k))
1269 si->shallow_ref[j * 32 + k]++;
1270 }
1271
1272 /*
1273 * true for those associated with some refs and belong
1274 * in "ours" list aka "step 7 not done yet"
1275 */
1276 si->need_reachability_test[i] =
1277 si->need_reachability_test[i] > 1;
1278 }
1279
1280 /*
1281 * keep hooks happy by forcing a temporary shallow file via
1282 * env variable because we can't add --shallow-file to every
1283 * command. check_everything_connected() will be done with
1284 * true .git/shallow though.
1285 */
1286 setenv(GIT_SHALLOW_FILE_ENVIRONMENT, alt_shallow_file, 1);
1287}
1288
1289static void update_shallow_info(struct command *commands,
1290 struct shallow_info *si,
1291 struct sha1_array *ref)
1292{
1293 struct command *cmd;
1294 int *ref_status;
1295 remove_nonexistent_theirs_shallow(si);
1296 if (!si->nr_ours && !si->nr_theirs) {
1297 shallow_update = 0;
1298 return;
1299 }
1300
1301 for (cmd = commands; cmd; cmd = cmd->next) {
1302 if (is_null_sha1(cmd->new_sha1))
1303 continue;
1304 sha1_array_append(ref, cmd->new_sha1);
1305 cmd->index = ref->nr - 1;
1306 }
1307 si->ref = ref;
1308
1309 if (shallow_update) {
1310 prepare_shallow_update(commands, si);
1311 return;
1312 }
1313
1314 ref_status = xmalloc(sizeof(*ref_status) * ref->nr);
1315 assign_shallow_commits_to_refs(si, NULL, ref_status);
1316 for (cmd = commands; cmd; cmd = cmd->next) {
1317 if (is_null_sha1(cmd->new_sha1))
1318 continue;
1319 if (ref_status[cmd->index]) {
1320 cmd->error_string = "shallow update not allowed";
1321 cmd->skip_update = 1;
1322 }
1323 }
1324 free(ref_status);
1325}
1326
1327static void report(struct command *commands, const char *unpack_status)
1328{
1329 struct command *cmd;
1330 struct strbuf buf = STRBUF_INIT;
1331
1332 packet_buf_write(&buf, "unpack %s\n",
1333 unpack_status ? unpack_status : "ok");
1334 for (cmd = commands; cmd; cmd = cmd->next) {
1335 if (!cmd->error_string)
1336 packet_buf_write(&buf, "ok %s\n",
1337 cmd->ref_name);
1338 else
1339 packet_buf_write(&buf, "ng %s %s\n",
1340 cmd->ref_name, cmd->error_string);
1341 }
1342 packet_buf_flush(&buf);
1343
1344 if (use_sideband)
1345 send_sideband(1, 1, buf.buf, buf.len, use_sideband);
1346 else
1347 write_or_die(1, buf.buf, buf.len);
1348 strbuf_release(&buf);
1349}
1350
1351static int delete_only(struct command *commands)
1352{
1353 struct command *cmd;
1354 for (cmd = commands; cmd; cmd = cmd->next) {
1355 if (!is_null_sha1(cmd->new_sha1))
1356 return 0;
1357 }
1358 return 1;
1359}
1360
1361int cmd_receive_pack(int argc, const char **argv, const char *prefix)
1362{
1363 int advertise_refs = 0;
1364 int stateless_rpc = 0;
1365 int i;
1366 const char *dir = NULL;
1367 struct command *commands;
1368 struct sha1_array shallow = SHA1_ARRAY_INIT;
1369 struct sha1_array ref = SHA1_ARRAY_INIT;
1370 struct shallow_info si;
1371
1372 packet_trace_identity("receive-pack");
1373
1374 argv++;
1375 for (i = 1; i < argc; i++) {
1376 const char *arg = *argv++;
1377
1378 if (*arg == '-') {
1379 if (!strcmp(arg, "--quiet")) {
1380 quiet = 1;
1381 continue;
1382 }
1383
1384 if (!strcmp(arg, "--advertise-refs")) {
1385 advertise_refs = 1;
1386 continue;
1387 }
1388 if (!strcmp(arg, "--stateless-rpc")) {
1389 stateless_rpc = 1;
1390 continue;
1391 }
1392 if (!strcmp(arg, "--reject-thin-pack-for-testing")) {
1393 fix_thin = 0;
1394 continue;
1395 }
1396
1397 usage(receive_pack_usage);
1398 }
1399 if (dir)
1400 usage(receive_pack_usage);
1401 dir = arg;
1402 }
1403 if (!dir)
1404 usage(receive_pack_usage);
1405
1406 setup_path();
1407
1408 if (!enter_repo(dir, 0))
1409 die("'%s' does not appear to be a git repository", dir);
1410
1411 git_config(receive_pack_config, NULL);
1412 if (cert_nonce_seed)
1413 push_cert_nonce = prepare_push_cert_nonce(dir, time(NULL));
1414
1415 if (0 <= transfer_unpack_limit)
1416 unpack_limit = transfer_unpack_limit;
1417 else if (0 <= receive_unpack_limit)
1418 unpack_limit = receive_unpack_limit;
1419
1420 if (advertise_refs || !stateless_rpc) {
1421 write_head_info();
1422 }
1423 if (advertise_refs)
1424 return 0;
1425
1426 if ((commands = read_head_info(&shallow)) != NULL) {
1427 const char *unpack_status = NULL;
1428
1429 prepare_shallow_info(&si, &shallow);
1430 if (!si.nr_ours && !si.nr_theirs)
1431 shallow_update = 0;
1432 if (!delete_only(commands)) {
1433 unpack_status = unpack_with_sideband(&si);
1434 update_shallow_info(commands, &si, &ref);
1435 }
1436 execute_commands(commands, unpack_status, &si);
1437 if (pack_lockfile)
1438 unlink_or_warn(pack_lockfile);
1439 if (report_status)
1440 report(commands, unpack_status);
1441 run_receive_hook(commands, "post-receive", 1);
1442 run_update_post_hook(commands);
1443 if (auto_gc) {
1444 const char *argv_gc_auto[] = {
1445 "gc", "--auto", "--quiet", NULL,
1446 };
1447 int opt = RUN_GIT_CMD | RUN_COMMAND_STDOUT_TO_STDERR;
1448 run_command_v_opt(argv_gc_auto, opt);
1449 }
1450 if (auto_update_server_info)
1451 update_server_info(0);
1452 clear_shallow_info(&si);
1453 }
1454 if (use_sideband)
1455 packet_flush(1);
1456 sha1_array_clear(&shallow);
1457 sha1_array_clear(&ref);
1458 free((void *)push_cert_nonce);
1459 return 0;
1460}