commit - 678ade17323ba52d28ca9b2b58dfe8a232958363
commit + e70bf110de343a3c1fc422b6682f56853686772f
blob - dcfb30c7f3aef64701b8fae8369a9a04ded29115
blob + b6668b257a2454bd0f92457ae8cd5ccb9069e2a9
--- lib/got_lib_privsep.h
+++ lib/got_lib_privsep.h
const struct got_error *got_send_ack(pid_t);
const struct got_error *got_privsep_wait_for_child(pid_t);
+const struct got_error *got_privsep_flush_imsg(struct imsgbuf *);
const struct got_error *got_privsep_send_stop(int);
const struct got_error *got_privsep_recv_imsg(struct imsg *, struct imsgbuf *,
size_t);
uint8_t *, int);
const struct got_error *got_privsep_send_index_pack_outfd(struct imsgbuf *,
int);
-const struct got_error *got_privsep_send_index_pack_progress(struct imsgbuf *,
- int, int, int, int);
-const struct got_error *got_privsep_send_index_pack_done(struct imsgbuf *);
const struct got_error *got_privsep_recv_index_progress(int *, int *, int *,
int *, int *, struct imsgbuf *ibuf);
const struct got_error *got_privsep_send_fetch_req(struct imsgbuf *, int,
struct got_pathlist_head *, int, struct got_pathlist_head *,
struct got_pathlist_head *, int, int);
const struct got_error *got_privsep_send_fetch_outfd(struct imsgbuf *, int);
-const struct got_error *got_privsep_send_fetch_symrefs(struct imsgbuf *,
- struct got_pathlist_head *);
-const struct got_error *got_privsep_send_fetch_ref(struct imsgbuf *,
- struct got_object_id *, const char *);
-const struct got_error *got_privsep_send_fetch_server_progress(struct imsgbuf *,
- const char *, size_t);
-const struct got_error *got_privsep_send_fetch_download_progress(struct imsgbuf *,
- off_t);
const struct got_error *got_privsep_recv_fetch_progress(int *,
struct got_object_id **, char **, struct got_pathlist_head *,
char **, off_t *, struct imsgbuf *);
-const struct got_error *got_privsep_send_fetch_done(struct imsgbuf *,
- struct got_object_id);
const struct got_error *got_privsep_get_imsg_obj(struct got_object **,
struct imsg *, struct imsgbuf *);
const struct got_error *got_privsep_recv_obj(struct got_object **,
const struct got_error *got_privsep_send_gitconfig_remotes_req(
struct imsgbuf *);
const struct got_error *got_privsep_send_gitconfig_owner_req(struct imsgbuf *);
-const struct got_error *got_privsep_send_gitconfig_str(struct imsgbuf *,
- const char *);
const struct got_error *got_privsep_recv_gitconfig_str(char **,
struct imsgbuf *);
-const struct got_error *got_privsep_send_gitconfig_int(struct imsgbuf *, int);
const struct got_error *got_privsep_recv_gitconfig_int(int *, struct imsgbuf *);
-const struct got_error *got_privsep_send_gitconfig_remotes(struct imsgbuf *,
- struct got_remote_repo *, int);
const struct got_error *got_privsep_recv_gitconfig_remotes(
struct got_remote_repo **, int *, struct imsgbuf *);
const struct got_error *got_privsep_recv_traversed_commits(
struct got_commit_object **, struct got_object_id **,
struct got_object_id_queue *, struct imsgbuf *);
-const struct got_error *got_privsep_send_traversed_commits(
- struct got_object_id *, size_t, struct imsgbuf *);
-const struct got_error *got_privsep_send_commit_traversal_done(
- struct imsgbuf *);
void got_privsep_exec_child(int[2], const char *, const char *);
blob - 3e7631e45cb6f10d8c034f2706fc258bd7aeea54
blob + 8fcc4cad0241a7f7715f2d045fcb4a7b0cf2bb7d
--- lib/privsep.c
+++ lib/privsep.c
}
const struct got_error *
+got_privsep_flush_imsg(struct imsgbuf *ibuf)
+{
+ return flush_imsg(ibuf);
+}
+
+const struct got_error *
got_privsep_send_stop(int fd)
{
const struct got_error *err = NULL;
got_privsep_send_fetch_outfd(struct imsgbuf *ibuf, int fd)
{
return send_fd(ibuf, GOT_IMSG_FETCH_OUTFD, fd);
-}
-
-
-const struct got_error *
-got_privsep_send_fetch_symrefs(struct imsgbuf *ibuf,
- struct got_pathlist_head *symrefs)
-{
- const struct got_error *err = NULL;
- struct ibuf *wbuf;
- size_t len, nsymrefs = 0;
- struct got_pathlist_entry *pe;
-
- len = sizeof(struct got_imsg_fetch_symrefs);
- TAILQ_FOREACH(pe, symrefs, entry) {
- const char *target = pe->data;
- len += sizeof(struct got_imsg_fetch_symref) +
- pe->path_len + strlen(target);
- nsymrefs++;
- }
-
- if (len >= MAX_IMSGSIZE - IMSG_HEADER_SIZE)
- return got_error(GOT_ERR_NO_SPACE);
-
- wbuf = imsg_create(ibuf, GOT_IMSG_FETCH_SYMREFS, 0, 0, len);
- if (wbuf == NULL)
- return got_error_from_errno("imsg_create FETCH_SYMREFS");
-
- /* Keep in sync with struct got_imsg_fetch_symrefs definition! */
- if (imsg_add(wbuf, &nsymrefs, sizeof(nsymrefs)) == -1) {
- err = got_error_from_errno("imsg_add FETCH_SYMREFS");
- ibuf_free(wbuf);
- return err;
- }
-
- TAILQ_FOREACH(pe, symrefs, entry) {
- const char *name = pe->path;
- size_t name_len = pe->path_len;
- const char *target = pe->data;
- size_t target_len = strlen(target);
-
- /* Keep in sync with struct got_imsg_fetch_symref definition! */
- if (imsg_add(wbuf, &name_len, sizeof(name_len)) == -1) {
- err = got_error_from_errno("imsg_add FETCH_SYMREFS");
- ibuf_free(wbuf);
- return err;
- }
- if (imsg_add(wbuf, &target_len, sizeof(target_len)) == -1) {
- err = got_error_from_errno("imsg_add FETCH_SYMREFS");
- ibuf_free(wbuf);
- return err;
- }
- if (imsg_add(wbuf, name, name_len) == -1) {
- err = got_error_from_errno("imsg_add FETCH_SYMREFS");
- ibuf_free(wbuf);
- return err;
- }
- if (imsg_add(wbuf, target, target_len) == -1) {
- err = got_error_from_errno("imsg_add FETCH_SYMREFS");
- ibuf_free(wbuf);
- return err;
- }
- }
-
- wbuf->fd = -1;
- imsg_close(ibuf, wbuf);
- return flush_imsg(ibuf);
-}
-
-const struct got_error *
-got_privsep_send_fetch_ref(struct imsgbuf *ibuf,
- struct got_object_id *refid, const char *refname)
-{
- const struct got_error *err = NULL;
- struct ibuf *wbuf;
- size_t len, reflen = strlen(refname);
-
- len = sizeof(struct got_imsg_fetch_ref) + reflen;
- if (len >= MAX_IMSGSIZE - IMSG_HEADER_SIZE)
- return got_error(GOT_ERR_NO_SPACE);
-
- wbuf = imsg_create(ibuf, GOT_IMSG_FETCH_REF, 0, 0, len);
- if (wbuf == NULL)
- return got_error_from_errno("imsg_create FETCH_REF");
-
- /* Keep in sync with struct got_imsg_fetch_ref definition! */
- if (imsg_add(wbuf, refid->sha1, SHA1_DIGEST_LENGTH) == -1) {
- err = got_error_from_errno("imsg_add FETCH_REF");
- ibuf_free(wbuf);
- return err;
- }
- if (imsg_add(wbuf, refname, reflen) == -1) {
- err = got_error_from_errno("imsg_add FETCH_REF");
- ibuf_free(wbuf);
- return err;
- }
-
- wbuf->fd = -1;
- imsg_close(ibuf, wbuf);
- return flush_imsg(ibuf);
}
const struct got_error *
-got_privsep_send_fetch_server_progress(struct imsgbuf *ibuf, const char *msg,
- size_t msglen)
-{
- if (msglen > MAX_IMSGSIZE - IMSG_HEADER_SIZE)
- return got_error(GOT_ERR_NO_SPACE);
-
- if (msglen == 0)
- return NULL;
-
- if (imsg_compose(ibuf, GOT_IMSG_FETCH_SERVER_PROGRESS, 0, 0, -1,
- msg, msglen) == -1)
- return got_error_from_errno(
- "imsg_compose FETCH_SERVER_PROGRESS");
-
- return flush_imsg(ibuf);
-}
-
-const struct got_error *
-got_privsep_send_fetch_download_progress(struct imsgbuf *ibuf, off_t bytes)
-{
- if (imsg_compose(ibuf, GOT_IMSG_FETCH_DOWNLOAD_PROGRESS, 0, 0, -1,
- &bytes, sizeof(bytes)) == -1)
- return got_error_from_errno(
- "imsg_compose FETCH_DOWNLOAD_PROGRESS");
-
- return flush_imsg(ibuf);
-}
-
-const struct got_error *
-got_privsep_send_fetch_done(struct imsgbuf *ibuf, struct got_object_id hash)
-{
- if (imsg_compose(ibuf, GOT_IMSG_FETCH_DONE, 0, 0, -1,
- hash.sha1, SHA1_DIGEST_LENGTH) == -1)
- return got_error_from_errno("imsg_compose FETCH");
- return flush_imsg(ibuf);
-}
-
-
-const struct got_error *
got_privsep_recv_fetch_progress(int *done, struct got_object_id **id,
char **refname, struct got_pathlist_head *symrefs, char **server_progress,
off_t *packfile_size, struct imsgbuf *ibuf)
}
const struct got_error *
-got_privsep_send_index_pack_progress(struct imsgbuf *ibuf, int nobj_total,
- int nobj_indexed, int nobj_loose, int nobj_resolved)
-{
- struct got_imsg_index_pack_progress iprogress;
-
- iprogress.nobj_total = nobj_total;
- iprogress.nobj_indexed = nobj_indexed;
- iprogress.nobj_loose = nobj_loose;
- iprogress.nobj_resolved = nobj_resolved;
-
- if (imsg_compose(ibuf, GOT_IMSG_IDXPACK_PROGRESS, 0, 0, -1,
- &iprogress, sizeof(iprogress)) == -1)
- return got_error_from_errno("imsg_compose IDXPACK_PROGRESS");
-
- return flush_imsg(ibuf);
-}
-
-const struct got_error *
-got_privsep_send_index_pack_done(struct imsgbuf *ibuf)
-{
- if (imsg_compose(ibuf, GOT_IMSG_IDXPACK_DONE, 0, 0, -1, NULL, 0) == -1)
- return got_error_from_errno("imsg_compose FETCH");
- return flush_imsg(ibuf);
-}
-
-const struct got_error *
got_privsep_recv_index_progress(int *done, int *nobj_total,
int *nobj_indexed, int *nobj_loose, int *nobj_resolved,
struct imsgbuf *ibuf)
}
const struct got_error *
-got_privsep_send_gitconfig_str(struct imsgbuf *ibuf, const char *value)
-{
- size_t len = value ? strlen(value) + 1 : 0;
-
- if (imsg_compose(ibuf, GOT_IMSG_GITCONFIG_STR_VAL, 0, 0, -1,
- value, len) == -1)
- return got_error_from_errno("imsg_compose GITCONFIG_STR_VAL");
-
- return flush_imsg(ibuf);
-}
-
-const struct got_error *
got_privsep_recv_gitconfig_str(char **str, struct imsgbuf *ibuf)
{
const struct got_error *err = NULL;
}
const struct got_error *
-got_privsep_send_gitconfig_int(struct imsgbuf *ibuf, int value)
-{
- if (imsg_compose(ibuf, GOT_IMSG_GITCONFIG_INT_VAL, 0, 0, -1,
- &value, sizeof(value)) == -1)
- return got_error_from_errno("imsg_compose GITCONFIG_INT_VAL");
-
- return flush_imsg(ibuf);
-}
-
-const struct got_error *
got_privsep_recv_gitconfig_int(int *val, struct imsgbuf *ibuf)
{
const struct got_error *err = NULL;
imsg_free(&imsg);
return err;
-}
-
-const struct got_error *
-got_privsep_send_gitconfig_remotes(struct imsgbuf *ibuf,
- struct got_remote_repo *remotes, int nremotes)
-{
- const struct got_error *err = NULL;
- struct got_imsg_remotes iremotes;
- int i;
-
- iremotes.nremotes = nremotes;
- if (imsg_compose(ibuf, GOT_IMSG_GITCONFIG_REMOTES, 0, 0, -1,
- &iremotes, sizeof(iremotes)) == -1)
- return got_error_from_errno("imsg_compose GITCONFIG_REMOTES");
-
- err = flush_imsg(ibuf);
- imsg_clear(ibuf);
- if (err)
- return err;
-
- for (i = 0; i < nremotes; i++) {
- struct got_imsg_remote iremote;
- size_t len = sizeof(iremote);
- struct ibuf *wbuf;
-
- iremote.mirror_references = remotes[i].mirror_references;
- iremote.name_len = strlen(remotes[i].name);
- len += iremote.name_len;
- iremote.url_len = strlen(remotes[i].url);
- len += iremote.url_len;
-
- wbuf = imsg_create(ibuf, GOT_IMSG_GITCONFIG_REMOTE, 0, 0, len);
- if (wbuf == NULL)
- return got_error_from_errno(
- "imsg_create GITCONFIG_REMOTE");
-
- if (imsg_add(wbuf, &iremote, sizeof(iremote)) == -1) {
- err = got_error_from_errno(
- "imsg_add GITCONFIG_REMOTE");
- ibuf_free(wbuf);
- return err;
- }
-
- if (imsg_add(wbuf, remotes[i].name, iremote.name_len) == -1) {
- err = got_error_from_errno(
- "imsg_add GITCONFIG_REMOTE");
- ibuf_free(wbuf);
- return err;
- }
- if (imsg_add(wbuf, remotes[i].url, iremote.url_len) == -1) {
- err = got_error_from_errno(
- "imsg_add GITCONFIG_REMOTE");
- ibuf_free(wbuf);
- return err;
- }
-
- wbuf->fd = -1;
- imsg_close(ibuf, wbuf);
- err = flush_imsg(ibuf);
- if (err)
- return err;
- }
-
- return NULL;
}
const struct got_error *
}
if (imsg_add(wbuf, path, path_len) == -1) {
err = got_error_from_errno("imsg_add COMMIT_TRAVERSAL_REQUEST");
- ibuf_free(wbuf);
- return err;
- }
-
- wbuf->fd = -1;
- imsg_close(ibuf, wbuf);
-
- return flush_imsg(ibuf);
-}
-
-const struct got_error *
-got_privsep_send_traversed_commits(struct got_object_id *commit_ids,
- size_t ncommits, struct imsgbuf *ibuf)
-{
- const struct got_error *err;
- struct ibuf *wbuf;
- int i;
-
- wbuf = imsg_create(ibuf, GOT_IMSG_TRAVERSED_COMMITS, 0, 0,
- sizeof(struct got_imsg_traversed_commits) +
- ncommits * SHA1_DIGEST_LENGTH);
- if (wbuf == NULL)
- return got_error_from_errno("imsg_create TRAVERSED_COMMITS");
-
- if (imsg_add(wbuf, &ncommits, sizeof(ncommits)) == -1) {
- err = got_error_from_errno("imsg_add TRAVERSED_COMMITS");
ibuf_free(wbuf);
return err;
}
- for (i = 0; i < ncommits; i++) {
- struct got_object_id *id = &commit_ids[i];
- if (imsg_add(wbuf, id->sha1, SHA1_DIGEST_LENGTH) == -1) {
- err = got_error_from_errno(
- "imsg_add TRAVERSED_COMMITS");
- ibuf_free(wbuf);
- return err;
- }
- }
wbuf->fd = -1;
imsg_close(ibuf, wbuf);
}
const struct got_error *
-got_privsep_send_commit_traversal_done(struct imsgbuf *ibuf)
-{
- if (imsg_compose(ibuf, GOT_IMSG_COMMIT_TRAVERSAL_DONE, 0, 0, -1,
- NULL, 0) == -1)
- return got_error_from_errno("imsg_compose TRAVERSAL_DONE");
-
- return flush_imsg(ibuf);
-}
-
-const struct got_error *
got_privsep_unveil_exec_helpers(void)
{
const char *helpers[] = {
blob - 8bedceae325de82abd4bbef6715118687872c598
blob + fe49bfbdb846dbdf93b1ea61211e91911f5ee571
--- libexec/got-fetch-pack/got-fetch-pack.c
+++ libexec/got-fetch-pack/got-fetch-pack.c
err = got_error_from_errno("strdup");
}
return err;
+}
+
+static const struct got_error *
+send_fetch_server_progress(struct imsgbuf *ibuf, const char *msg, size_t msglen)
+{
+ if (msglen > MAX_IMSGSIZE - IMSG_HEADER_SIZE)
+ return got_error(GOT_ERR_NO_SPACE);
+
+ if (msglen == 0)
+ return NULL;
+
+ if (imsg_compose(ibuf, GOT_IMSG_FETCH_SERVER_PROGRESS, 0, 0, -1,
+ msg, msglen) == -1)
+ return got_error_from_errno(
+ "imsg_compose FETCH_SERVER_PROGRESS");
+
+ return got_privsep_flush_imsg(ibuf);
}
static const struct got_error *
+send_fetch_download_progress(struct imsgbuf *ibuf, off_t bytes)
+{
+ if (imsg_compose(ibuf, GOT_IMSG_FETCH_DOWNLOAD_PROGRESS, 0, 0, -1,
+ &bytes, sizeof(bytes)) == -1)
+ return got_error_from_errno(
+ "imsg_compose FETCH_DOWNLOAD_PROGRESS");
+
+ return got_privsep_flush_imsg(ibuf);
+}
+
+static const struct got_error *
+send_fetch_done(struct imsgbuf *ibuf, struct got_object_id hash)
+{
+ if (imsg_compose(ibuf, GOT_IMSG_FETCH_DONE, 0, 0, -1,
+ hash.sha1, SHA1_DIGEST_LENGTH) == -1)
+ return got_error_from_errno("imsg_compose FETCH");
+ return got_privsep_flush_imsg(ibuf);
+}
+
+
+
+static const struct got_error *
fetch_progress(struct imsgbuf *ibuf, const char *buf, size_t len)
{
int i;
"non-printable progress message received from server");
}
- return got_privsep_send_fetch_server_progress(ibuf, buf, len);
+ return send_fetch_server_progress(ibuf, buf, len);
}
static const struct got_error *
}
static const struct got_error *
+send_fetch_symrefs(struct imsgbuf *ibuf, struct got_pathlist_head *symrefs)
+{
+ const struct got_error *err = NULL;
+ struct ibuf *wbuf;
+ size_t len, nsymrefs = 0;
+ struct got_pathlist_entry *pe;
+
+ len = sizeof(struct got_imsg_fetch_symrefs);
+ TAILQ_FOREACH(pe, symrefs, entry) {
+ const char *target = pe->data;
+ len += sizeof(struct got_imsg_fetch_symref) +
+ pe->path_len + strlen(target);
+ nsymrefs++;
+ }
+
+ if (len >= MAX_IMSGSIZE - IMSG_HEADER_SIZE)
+ return got_error(GOT_ERR_NO_SPACE);
+
+ wbuf = imsg_create(ibuf, GOT_IMSG_FETCH_SYMREFS, 0, 0, len);
+ if (wbuf == NULL)
+ return got_error_from_errno("imsg_create FETCH_SYMREFS");
+
+ /* Keep in sync with struct got_imsg_fetch_symrefs definition! */
+ if (imsg_add(wbuf, &nsymrefs, sizeof(nsymrefs)) == -1) {
+ err = got_error_from_errno("imsg_add FETCH_SYMREFS");
+ ibuf_free(wbuf);
+ return err;
+ }
+
+ TAILQ_FOREACH(pe, symrefs, entry) {
+ const char *name = pe->path;
+ size_t name_len = pe->path_len;
+ const char *target = pe->data;
+ size_t target_len = strlen(target);
+
+ /* Keep in sync with struct got_imsg_fetch_symref definition! */
+ if (imsg_add(wbuf, &name_len, sizeof(name_len)) == -1) {
+ err = got_error_from_errno("imsg_add FETCH_SYMREFS");
+ ibuf_free(wbuf);
+ return err;
+ }
+ if (imsg_add(wbuf, &target_len, sizeof(target_len)) == -1) {
+ err = got_error_from_errno("imsg_add FETCH_SYMREFS");
+ ibuf_free(wbuf);
+ return err;
+ }
+ if (imsg_add(wbuf, name, name_len) == -1) {
+ err = got_error_from_errno("imsg_add FETCH_SYMREFS");
+ ibuf_free(wbuf);
+ return err;
+ }
+ if (imsg_add(wbuf, target, target_len) == -1) {
+ err = got_error_from_errno("imsg_add FETCH_SYMREFS");
+ ibuf_free(wbuf);
+ return err;
+ }
+ }
+
+ wbuf->fd = -1;
+ imsg_close(ibuf, wbuf);
+ return got_privsep_flush_imsg(ibuf);
+}
+
+static const struct got_error *
+send_fetch_ref(struct imsgbuf *ibuf, struct got_object_id *refid,
+ const char *refname)
+{
+ const struct got_error *err = NULL;
+ struct ibuf *wbuf;
+ size_t len, reflen = strlen(refname);
+
+ len = sizeof(struct got_imsg_fetch_ref) + reflen;
+ if (len >= MAX_IMSGSIZE - IMSG_HEADER_SIZE)
+ return got_error(GOT_ERR_NO_SPACE);
+
+ wbuf = imsg_create(ibuf, GOT_IMSG_FETCH_REF, 0, 0, len);
+ if (wbuf == NULL)
+ return got_error_from_errno("imsg_create FETCH_REF");
+
+ /* Keep in sync with struct got_imsg_fetch_ref definition! */
+ if (imsg_add(wbuf, refid->sha1, SHA1_DIGEST_LENGTH) == -1) {
+ err = got_error_from_errno("imsg_add FETCH_REF");
+ ibuf_free(wbuf);
+ return err;
+ }
+ if (imsg_add(wbuf, refname, reflen) == -1) {
+ err = got_error_from_errno("imsg_add FETCH_REF");
+ ibuf_free(wbuf);
+ return err;
+ }
+
+ wbuf->fd = -1;
+ imsg_close(ibuf, wbuf);
+ return got_privsep_flush_imsg(ibuf);
+}
+
+
+static const struct got_error *
fetch_pack(int fd, int packfd, struct got_object_id *packid,
struct got_pathlist_head *have_refs, int fetch_all_branches,
struct got_pathlist_head *wanted_branches,
if (chattygot)
fprintf(stderr, "%s: my capabilities:%s\n",
getprogname(), my_capabilities);
- err = got_privsep_send_fetch_symrefs(ibuf, &symrefs);
+ err = send_fetch_symrefs(ibuf, &symrefs);
if (err)
goto done;
is_firstpkt = 0;
goto done;
}
match_remote_ref(have_refs, &have[nref], refname);
- err = got_privsep_send_fetch_ref(ibuf, &want[nref],
- refname);
+ err = send_fetch_ref(ibuf, &want[nref], refname);
if (err)
goto done;
/* Don't send too many progress privsep messages. */
if (packsz > last_reported_packsz + 1024) {
- err = got_privsep_send_fetch_download_progress(ibuf,
- packsz);
+ err = send_fetch_download_progress(ibuf, packsz);
if (err)
goto done;
last_reported_packsz = packsz;
}
}
- err = got_privsep_send_fetch_download_progress(ibuf, packsz);
+ err = send_fetch_download_progress(ibuf, packsz);
if (err)
goto done;
done:
if (err != NULL)
got_privsep_send_error(&ibuf, err);
else
- err = got_privsep_send_fetch_done(&ibuf, packid);
+ err = send_fetch_done(&ibuf, packid);
if (err != NULL) {
fprintf(stderr, "%s: %s\n", getprogname(), err->msg);
got_privsep_send_error(&ibuf, err);
blob - e2ac91ea26b2772a6a81c2d5fb5b7c950157677d
blob + bfc9107d2db18c2536c48ab9fad45c73b2153910
--- libexec/got-index-pack/got-index-pack.c
+++ libexec/got-index-pack/got-index-pack.c
sizeof(uint32_t) * (nindexed - idx));
add_indexed_object(packidx, idx, obj);
+}
+
+static const struct got_error *
+send_index_pack_progress(struct imsgbuf *ibuf, int nobj_total,
+ int nobj_indexed, int nobj_loose, int nobj_resolved)
+{
+ struct got_imsg_index_pack_progress iprogress;
+
+ iprogress.nobj_total = nobj_total;
+ iprogress.nobj_indexed = nobj_indexed;
+ iprogress.nobj_loose = nobj_loose;
+ iprogress.nobj_resolved = nobj_resolved;
+
+ if (imsg_compose(ibuf, GOT_IMSG_IDXPACK_PROGRESS, 0, 0, -1,
+ &iprogress, sizeof(iprogress)) == -1)
+ return got_error_from_errno("imsg_compose IDXPACK_PROGRESS");
+
+ return got_privsep_flush_imsg(ibuf);
+}
+
+static const struct got_error *
+send_index_pack_done(struct imsgbuf *ibuf)
+{
+ if (imsg_compose(ibuf, GOT_IMSG_IDXPACK_DONE, 0, 0, -1, NULL, 0) == -1)
+ return got_error_from_errno("imsg_compose FETCH");
+ return got_privsep_flush_imsg(ibuf);
}
+
static const struct got_error *
index_pack(struct got_pack *pack, int idxfd, FILE *tmpfile,
FILE *delta_base_file, FILE *delta_accum_file, uint8_t *pack_hash,
/* Don't send too many progress privsep messages. */
p_indexed = ((i + 1) * 100) / nobj;
if (p_indexed != last_p_indexed) {
- err = got_privsep_send_index_pack_progress(ibuf,
- nobj, i + 1, nloose, 0);
+ err = send_index_pack_progress(ibuf, nobj, i + 1,
+ nloose, 0);
if (err)
goto done;
last_p_indexed = p_indexed;
/* Don't send too many progress privsep messages. */
p_resolved = ((nresolved + n) * 100) / nobj;
if (p_resolved != last_p_resolved) {
- err = got_privsep_send_index_pack_progress(ibuf,
- nobj, nobj, nloose, nresolved + n);
+ err = send_index_pack_progress(ibuf, nobj,
+ nobj, nloose, nresolved + n);
if (err)
goto done;
last_p_resolved = p_resolved;
goto done;
}
- err = got_privsep_send_index_pack_progress(ibuf, nobj, nobj,
- nloose, nresolved);
+ err = send_index_pack_progress(ibuf, nobj, nobj, nloose, nresolved);
if (err)
goto done;
}
if (err == NULL)
- err = got_privsep_send_index_pack_done(&ibuf);
+ err = send_index_pack_done(&ibuf);
if (err) {
got_privsep_send_error(&ibuf, err);
fprintf(stderr, "%s: %s\n", getprogname(), err->msg);
blob - 6f203d17788fd8772211527b029238c7be2d3e99
blob + 4685960f41cf29909f661344f0aa7dd6f83457c8
--- libexec/got-read-gitconfig/got-read-gitconfig.c
+++ libexec/got-read-gitconfig/got-read-gitconfig.c
}
static const struct got_error *
+send_gitconfig_int(struct imsgbuf *ibuf, int value)
+{
+ if (imsg_compose(ibuf, GOT_IMSG_GITCONFIG_INT_VAL, 0, 0, -1,
+ &value, sizeof(value)) == -1)
+ return got_error_from_errno("imsg_compose GITCONFIG_INT_VAL");
+
+ return got_privsep_flush_imsg(ibuf);
+}
+
+static const struct got_error *
gitconfig_num_request(struct imsgbuf *ibuf, struct got_gitconfig *gitconfig,
char *section, char *tag, int def)
{
return got_error(GOT_ERR_PRIVSEP_MSG);
value = got_gitconfig_get_num(gitconfig, section, tag, def);
- return got_privsep_send_gitconfig_int(ibuf, value);
+ return send_gitconfig_int(ibuf, value);
}
static const struct got_error *
+send_gitconfig_str(struct imsgbuf *ibuf, const char *value)
+{
+ size_t len = value ? strlen(value) + 1 : 0;
+
+ if (imsg_compose(ibuf, GOT_IMSG_GITCONFIG_STR_VAL, 0, 0, -1,
+ value, len) == -1)
+ return got_error_from_errno("imsg_compose GITCONFIG_STR_VAL");
+
+ return got_privsep_flush_imsg(ibuf);
+}
+
+static const struct got_error *
gitconfig_str_request(struct imsgbuf *ibuf, struct got_gitconfig *gitconfig,
char *section, char *tag)
{
return got_error(GOT_ERR_PRIVSEP_MSG);
value = got_gitconfig_get_str(gitconfig, section, tag);
- return got_privsep_send_gitconfig_str(ibuf, value);
+ return send_gitconfig_str(ibuf, value);
}
static const struct got_error *
+send_gitconfig_remotes(struct imsgbuf *ibuf, struct got_remote_repo *remotes,
+ int nremotes)
+{
+ const struct got_error *err = NULL;
+ struct got_imsg_remotes iremotes;
+ int i;
+
+ iremotes.nremotes = nremotes;
+ if (imsg_compose(ibuf, GOT_IMSG_GITCONFIG_REMOTES, 0, 0, -1,
+ &iremotes, sizeof(iremotes)) == -1)
+ return got_error_from_errno("imsg_compose GITCONFIG_REMOTES");
+
+ err = got_privsep_flush_imsg(ibuf);
+ imsg_clear(ibuf);
+ if (err)
+ return err;
+
+ for (i = 0; i < nremotes; i++) {
+ struct got_imsg_remote iremote;
+ size_t len = sizeof(iremote);
+ struct ibuf *wbuf;
+
+ iremote.mirror_references = remotes[i].mirror_references;
+ iremote.name_len = strlen(remotes[i].name);
+ len += iremote.name_len;
+ iremote.url_len = strlen(remotes[i].url);
+ len += iremote.url_len;
+
+ wbuf = imsg_create(ibuf, GOT_IMSG_GITCONFIG_REMOTE, 0, 0, len);
+ if (wbuf == NULL)
+ return got_error_from_errno(
+ "imsg_create GITCONFIG_REMOTE");
+
+ if (imsg_add(wbuf, &iremote, sizeof(iremote)) == -1) {
+ err = got_error_from_errno(
+ "imsg_add GITCONFIG_REMOTE");
+ ibuf_free(wbuf);
+ return err;
+ }
+
+ if (imsg_add(wbuf, remotes[i].name, iremote.name_len) == -1) {
+ err = got_error_from_errno(
+ "imsg_add GITCONFIG_REMOTE");
+ ibuf_free(wbuf);
+ return err;
+ }
+ if (imsg_add(wbuf, remotes[i].url, iremote.url_len) == -1) {
+ err = got_error_from_errno(
+ "imsg_add GITCONFIG_REMOTE");
+ ibuf_free(wbuf);
+ return err;
+ }
+
+ wbuf->fd = -1;
+ imsg_close(ibuf, wbuf);
+ err = got_privsep_flush_imsg(ibuf);
+ if (err)
+ return err;
+ }
+
+ return NULL;
+}
+
+
+static const struct got_error *
gitconfig_remotes_request(struct imsgbuf *ibuf, struct got_gitconfig *gitconfig)
{
const struct got_error *err = NULL;
}
if (nremotes == 0) {
- err = got_privsep_send_gitconfig_remotes(ibuf, NULL, 0);
+ err = send_gitconfig_remotes(ibuf, NULL, 0);
goto done;
}
i++;
}
- err = got_privsep_send_gitconfig_remotes(ibuf, remotes, nremotes);
+ err = send_gitconfig_remotes(ibuf, remotes, nremotes);
done:
for (i = 0; i < nremotes; i++)
free(remotes[i].name);
value = got_gitconfig_get_str(gitconfig, "gotweb", "owner");
if (value)
- return got_privsep_send_gitconfig_str(ibuf, value);
+ return send_gitconfig_str(ibuf, value);
value = got_gitconfig_get_str(gitconfig, "gitweb", "owner");
- return got_privsep_send_gitconfig_str(ibuf, value);
+ return send_gitconfig_str(ibuf, value);
}
int
blob - d690ffc7275d9e4d25db624b27397f29249f6361
blob + b66f6065e2c02dedef1895df6032263be70e7738
--- libexec/got-read-pack/got-read-pack.c
+++ libexec/got-read-pack/got-read-pack.c
}
static const struct got_error *
+send_traversed_commits(struct got_object_id *commit_ids, size_t ncommits,
+ struct imsgbuf *ibuf)
+{
+ const struct got_error *err;
+ struct ibuf *wbuf;
+ int i;
+
+ wbuf = imsg_create(ibuf, GOT_IMSG_TRAVERSED_COMMITS, 0, 0,
+ sizeof(struct got_imsg_traversed_commits) +
+ ncommits * SHA1_DIGEST_LENGTH);
+ if (wbuf == NULL)
+ return got_error_from_errno("imsg_create TRAVERSED_COMMITS");
+
+ if (imsg_add(wbuf, &ncommits, sizeof(ncommits)) == -1) {
+ err = got_error_from_errno("imsg_add TRAVERSED_COMMITS");
+ ibuf_free(wbuf);
+ return err;
+ }
+ for (i = 0; i < ncommits; i++) {
+ struct got_object_id *id = &commit_ids[i];
+ if (imsg_add(wbuf, id->sha1, SHA1_DIGEST_LENGTH) == -1) {
+ err = got_error_from_errno(
+ "imsg_add TRAVERSED_COMMITS");
+ ibuf_free(wbuf);
+ return err;
+ }
+ }
+
+ wbuf->fd = -1;
+ imsg_close(ibuf, wbuf);
+
+ return got_privsep_flush_imsg(ibuf);
+}
+
+static const struct got_error *
+send_commit_traversal_done(struct imsgbuf *ibuf)
+{
+ if (imsg_compose(ibuf, GOT_IMSG_COMMIT_TRAVERSAL_DONE, 0, 0, -1,
+ NULL, 0) == -1)
+ return got_error_from_errno("imsg_compose TRAVERSAL_DONE");
+
+ return got_privsep_flush_imsg(ibuf);
+}
+
+
+static const struct got_error *
commit_traversal_request(struct imsg *imsg, struct imsgbuf *ibuf,
struct got_pack *pack, struct got_packidx *packidx,
struct got_object_cache *objcache)
if (sizeof(struct got_imsg_traversed_commits) +
ncommits * SHA1_DIGEST_LENGTH >= max_datalen) {
- err = got_privsep_send_traversed_commits(commit_ids,
- ncommits, ibuf);
+ err = send_traversed_commits(commit_ids, ncommits,
+ ibuf);
if (err)
goto done;
ncommits = 0;
} while (!changed);
if (ncommits > 0) {
- err = got_privsep_send_traversed_commits(commit_ids,
- ncommits, ibuf);
+ err = send_traversed_commits(commit_ids, ncommits, ibuf);
if (err)
goto done;
goto done;
}
}
- err = got_privsep_send_commit_traversal_done(ibuf);
+ err = send_commit_traversal_done(ibuf);
done:
free(commit_ids);
if (commit)