From b1e096ec94f6d0b63537e2ec15403a31ec3d5d97 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sun, 21 Aug 2022 16:15:32 +0100 Subject: [PATCH] prefork-interp: ident Signed-off-by: Ian Jackson --- cprogs/prefork-interp.c | 12 +++++------- cprogs/prefork.c | 22 ++++++++++------------ cprogs/prefork.h | 15 ++++++++++----- 3 files changed, 25 insertions(+), 24 deletions(-) diff --git a/cprogs/prefork-interp.c b/cprogs/prefork-interp.c index 61dcca9..fe02827 100644 --- a/cprogs/prefork-interp.c +++ b/cprogs/prefork-interp.c @@ -426,21 +426,19 @@ static void ident_add_stat(const char *path) { int r = stat(path, &stab); if (r) diee("failed to stat %s", path); - IDENT_ADD_OBJ(stab.st_dev); - IDENT_ADD_OBJ(stab.st_ino); + IDENT_ADD_OBJ(path[0], stab.st_dev); + IDENT_ADD_OBJ('i', stab.st_ino); } void ident_addinit(void) { - char magic = 1; - - IDENT_ADD_OBJ(magic); + ident_add_key_byte(1); struct utsname uts = { }; size_t utslen = sizeof(uts); int r = uname(&uts); if (r) diee("uname failed!"); - IDENT_ADD_OBJ(utslen); - IDENT_ADD_OBJ(uts); + IDENT_ADD_OBJ('u', utslen); + IDENT_ADD_OBJ('u', uts); ident_add_stat("."); ident_add_stat("/"); diff --git a/cprogs/prefork.c b/cprogs/prefork.c index eca03c8..e82fb11 100644 --- a/cprogs/prefork.c +++ b/cprogs/prefork.c @@ -55,28 +55,26 @@ void of_iassign(const struct cmdinfo *ci, const char *val) { *ci->iassignto = v; } -static void ident_addbyte(char c) { - IDENT_ADD_OBJ(c); +void ident_add_key_byte(char key) { + sha256_update(&identsc,1,&key); } -void ident_addstring(const char *string) { +void ident_addstring(char key, const char *string) { + ident_add_key_byte(key); sha256_update(&identsc,strlen(string)+1,string); } void off_ident_addstring(const struct cmdinfo *ci, const char *string) { - ident_addbyte('S'); - ident_addstring(string); + ident_addstring('G', string); } void off_ident_addenv(const struct cmdinfo *ci, const char *name) { + ident_addstring('E', name); const char *val = getenv(name); - ident_addbyte('E'); if (val) { - sha256_update(&identsc,strlen(name),name); /* no nul */ - sha256_update(&identsc,1,"="); - ident_addstring(val); + ident_addstring('v', val); } else { - ident_addstring(name); + ident_add_key_byte(0); } } @@ -161,9 +159,9 @@ void find_socket_path(void) { unsigned char bbuf[32]; int i; - ident_addstring(interp); + ident_addstring('i', interp); if (script) - ident_addstring(script); + ident_addstring('s', script); sha256_digest(&identsc,sizeof(bbuf),bbuf); for (i=0; i