int shlogd_main(int argc, char **argv) { int err; int fd; #ifdef SHLOGD_APPLICATION daemon(0, 1); #endif strncpy(process_path, argv[0], PATH_MAX); proc_peer = shapp_init(PROCESS_NAME, NULL, SHAPP_LOCAL); process_socket_port = PROCESS_PORT; fd = shnet_sk(); if (fd == -1) { perror("shsk"); return; } err = shnet_bindsk(fd, NULL, process_socket_port); if (err) { perror("shbindport"); shclose(fd); return (err); } process_socket_fd = fd; daemon_server(0); shpeer_free(&proc_peer); }
void card_nat_fill(shcard_t *card, shadow_t *shadow) { shpeer_t *peer; card->card_expire = shadow->sh_expire; card->card_acc = shadow->sh_uid; strcpy(card->card_type, CARDTYPE_NEONATURA); peer = shpeer(); memcpy(&card->card_issuer, peer, sizeof(shpeer_t)); shpeer_free(&peer); }
shdb_t *shgeodb_open(char *db_name) { shdb_t *db; shpeer_t *peer; peer = shpeer_init(NULL, NULL); /* "libshare" partition */ db = shdb_open_peer(db_name, peer); shpeer_free(&peer); if (!db) return (NULL); shgeodb_table_init(db, SHGEO_ZIPCODE); shgeodb_table_init(db, SHGEO_CITY); shgeodb_table_init(db, SHGEO_COMMON); shgeodb_table_init(db, SHGEO_NETWORK); #if 0 shgeodb_table_init(db, SHGEO_USER); #endif return (db); }
/** * @see shsig_shr_sign() */ int shcert_sign(shcert_t *cert, shcert_t *parent) { shkey_t *key; unsigned char *enc_data; size_t enc_len; int err; if (!parent) return (SHERR_INVAL); if (!(parent->cert_flag & SHCERT_CERT_SIGN)) { /* parent certificate lacks ability to sign. */ return (SHERR_INVAL); } /* assign issuer's 128-bit serial number (regardless of algorythm) */ memcpy(cert->cert_iss.ent_ser, parent->cert_sub.ent_ser, 16); if (cert->cert_sub.ent_sig.sig_key.alg == SHKEY_ALG_ECDSA) { shkey_t *pub_key = &cert->cert_sub.ent_sig.sig_key; shkey_t *priv_key; shkey_t *seed_key; shpeer_t *peer; char sig_r[256]; char sig_s[256]; char *hex_data; unsigned char data[256]; int data_len; /* fill in parent signature */ memcpy(&cert->cert_iss.ent_sig, &parent->cert_sub.ent_sig, sizeof(shsig_t)); peer = shpeer_init(NULL, NULL); seed_key = shpeer_kpriv(peer); priv_key = shecdsa_key_priv(shkey_hex(seed_key)); shpeer_free(&peer); pub_key = shecdsa_key_pub(priv_key); memcpy(&cert->cert_sub.ent_sig.sig_key, pub_key, sizeof(shkey_t)); if ((parent->cert_flag & SHCERT_CERT_NONREPUDIATION)) { /* must be derived from owner to preserve authenticy. */ if (!shkey_cmp(&cert->cert_sub.ent_sig.sig_key, &cert->cert_iss.ent_sig.sig_key)) { return (SHERR_ACCESS); } } hex_data = shkey_hex(&cert->cert_iss.ent_sig.sig_key); data_len = strlen(hex_data) / 2; memset(data, 0, sizeof(data)); hex2bin(data, hex_data, data_len); shecdsa_sign(priv_key, sig_r, sig_s, data, data_len); strcpy(cert->cert_sub.ent_sig.key.ecdsa.sig_r, sig_r); strcpy(cert->cert_sub.ent_sig.key.ecdsa.sig_s, sig_s); cert->cert_sub.ent_len = data_len; shkey_free(&pub_key); shkey_free(&priv_key); } else { err = shencode((char *)&parent->cert_sub.ent_sig.sig_key, sizeof(shkey_t), &enc_data, &enc_len, &parent->cert_iss.ent_sig.sig_key); if (err) return (err); key = shkey_bin(enc_data, enc_len); free(enc_data); memcpy(&cert->cert_sub.ent_sig.sig_key, key, sizeof(shkey_t)); cert->cert_sub.ent_len = enc_len; shkey_free(&key); } cert->cert_flag |= SHCERT_CERT_CHAIN; cert->cert_flag |= parent->cert_flag; /* inherit parent's attributes */ cert->cert_sub.ent_sig.sig_key.alg = parent->cert_sub.ent_sig.sig_key.alg; strcpy(cert->cert_iss.ent_name, parent->cert_sub.ent_name); cert->cert_iss.ent_sig.sig_stamp = parent->cert_sub.ent_sig.sig_stamp; cert->cert_iss.ent_sig.sig_expire = parent->cert_sub.ent_sig.sig_expire; cert->cert_iss.ent_len = parent->cert_sub.ent_len; return (0); }
int main(int argc, char **argv) { shpeer_t *app_peer; time_t stime, etime; time_t now; char subcmd[256]; char **args; char app_name[256]; int i; signal(SIGHUP, SIG_IGN); signal(SIGPIPE, SIG_IGN); strncpy(process_path, argv[0], PATH_MAX); proc_mode = RUN_NONE; /* handle traditional arguments */ for (i = 1; i < argc; i++) { if (0 == strcmp(argv[i], "--version") || 0 == strcmp(argv[i], "-v")) { print_process_version(); return (0); } if (0 == strcmp(argv[i], "--help") || 0 == strcmp(argv[i], "-h")) { print_process_usage(); return (0); } } memset(app_name, 0, sizeof(app_name)); for (i = 1; i < argc; i++) { if (0 == strcmp(argv[i], "-f")) { proc_mode = RUN_TAIL; continue; } if (argv[i][0] == '-') { continue; } strncpy(app_name, argv[i], sizeof(app_name) - 1); if (proc_mode == RUN_NONE) proc_mode = RUN_LIST; } app_peer = shpeer_init(app_name, NULL); now = time(NULL); stime = etime = now; switch (proc_mode) { case RUN_NONE: print_process_usage(); break; case RUN_LIST: sharelog_list(app_peer, stime, etime); break; case RUN_TAIL: sharelog_list(app_peer, now, now); sharelog_tail(app_peer); break; } shpeer_free(&app_peer); return (0); }
int sharedaemon_bcast_send(void) { struct ifaddrs *if_list; struct ifaddrs *dev; shpeer_t *peer; char hostname[NI_MAXHOST+1]; int err; err = getifaddrs(&if_list); if (err) return (-errno); /* cycle through all non loop-back interfaces. */ for (dev = if_list; dev; dev = dev->ifa_next) { if (dev->ifa_addr == NULL) continue; err = SHERR_OPNOTSUPP; memset(hostname, 0, sizeof(hostname)); switch (dev->ifa_addr->sa_family) { case AF_INET: err = getnameinfo(dev->ifa_addr, sizeof(struct sockaddr_in), hostname, NI_MAXHOST, NULL, 0, NI_NUMERICHOST); if (err) break; if (0 == strncmp(hostname, "127.0.0.", strlen("127.0.0."))) { /* local loop-back */ err = SHERR_AGAIN; break; } fprintf(stderr, "DEBUG: found inet device '%s' with addr '%s'\n", dev->ifa_name, hostname); err = 0; break; case AF_INET6: err = getnameinfo(dev->ifa_addr, sizeof(struct sockaddr_in6), hostname, NI_MAXHOST, NULL, 0, NI_NUMERICHOST); if (err) break; if (0 == strcmp(hostname, "::1")) { /* local loop-back */ err = SHERR_AGAIN; break; } fprintf(stderr, "DEBUG: found inet6 device '%s' with addr '%s'\n", dev->ifa_name, hostname); err = 0; break; default: fprintf(stderr, "DEBUG: found unknown (fam %d) device '%s' with addr '%s'\n", dev->ifa_addr->sa_family, dev->ifa_name, hostname); break; } if (err) { /* .. */ continue; } sprintf(hostname + strlen(hostname), " %d", server_port); peer = shpeer_init("shared", hostname); fprintf(stderr, "DEBUG: sharedaemon_bcast_send: %d = sharedaemon_bcast_send_peer(\"%s\")\n", err, hostname); err = sharedaemon_bcast_send_peer(peer); shpeer_free(&peer); if (err) { /* .. */ } } return (0); }