static void parent_bind(int fd) { int sock, status; struct sockaddr_storage ss; socklen_t sslen; int er; logmsg(LOG_DEBUG, "[priv]: msg PRIV_BIND received"); sock = receive_fd(fd); must_read(fd, &sslen, sizeof(sslen)); if (sslen == 0 || sslen > sizeof(ss)) _exit(1); must_read(fd, &ss, sslen); if (check_bind((struct sockaddr *) &ss, sslen)) _exit(1); status = bind(sock, (struct sockaddr *)&ss, sslen); er = errno; must_write(fd, &er, sizeof(er)); must_write(fd, &status, sizeof(status)); if (sock >= 0) close(sock); }
void check_bind_chon(char *hand, int idx) { struct flag_record fr = {FR_GLOBAL | FR_CHAN, 0, 0, 0 }; struct userrec *u = NULL; u = get_user_by_handle(userlist, hand); touch_laston(u, "partyline", now); get_user_flagrec(u, &fr, NULL); check_bind(BT_chon, hand, &fr, hand, idx); }
void check_bind_bot(const char *nick, const char *code, const char *param) { char *mynick = NULL, *myparam = NULL, *p1 = NULL, *p2 = NULL; mynick = p1 = strdup(nick); myparam = p2 = strdup(param); check_bind(BT_bot, code, NULL, mynick, code, myparam); free(p1); free(p2); }
/* Bind to allowed privileged ports using privsep, or try to bind locally */ int isc_priv_bind(int fd, struct sockaddr *sa, socklen_t salen) { int status, er; if (priv_fd < 0) errx(1, "%s called from privileged portion", __func__); if (check_bind(sa, salen)) { status = bind(fd, sa, salen); } else { logmsg(LOG_DEBUG, "Binding privsep"); write_command(priv_fd, PRIV_BIND); send_fd(priv_fd, fd); must_write(priv_fd, &salen, sizeof(salen)); must_write(priv_fd, sa, salen); must_read(priv_fd, &er, sizeof(er)); must_read(priv_fd, &status, sizeof(status)); errno = er; } return (status); }
void check_bind_time(struct tm *tm) { char full[32] = ""; egg_snprintf(full, sizeof(full), "%02d %02d %02d %02d %04d", tm->tm_min, tm->tm_hour, tm->tm_mday, tm->tm_mon, tm->tm_year + 1900); check_bind(BT_time, full, NULL, tm->tm_min, tm->tm_hour, tm->tm_mday, tm->tm_mon, tm->tm_year + 1900); }