/*ARGSUSED*/ static void * smbd_localtime_monitor(void *arg) { struct tm local_tm; time_t secs; int32_t gmtoff, last_gmtoff = -1; int timeout; int error; smbd_online_wait("smbd_localtime_monitor"); for (;;) { gmtoff = smbd_gmtoff(); if ((last_gmtoff != gmtoff) && smbd.s_kbound) { error = smb_kmod_setgmtoff(gmtoff); if (error != 0) smbd_report("localtime set failed: %s", strerror(error)); } /* * Align the next iteration on a fifteen minute boundary. */ secs = time(0); (void) localtime_r(&secs, &local_tm); timeout = ((15 - (local_tm.tm_min % 15)) * SECSPERMIN); (void) sleep(timeout); last_gmtoff = gmtoff; } /*NOTREACHED*/ return (NULL); }
static int smbd_kernel_start(void) { smb_kmod_cfg_t cfg; int rc; smb_load_kconfig(&cfg); rc = smb_kmod_setcfg(&cfg); if (rc != 0) { smbd_report("kernel config ioctl error: %s", strerror(rc)); return (rc); } rc = smb_kmod_setgmtoff(smbd_gmtoff()); if (rc != 0) { smbd_report("kernel gmtoff ioctl error: %s", strerror(rc)); return (rc); } rc = smb_kmod_start(smbd.s_door_opipe, smbd.s_door_lmshr, smbd.s_door_srv); if (rc != 0) { smbd_report("kernel start ioctl error: %s", strerror(rc)); return (rc); } return (0); }
static int smbd_kernel_start(void) { smb_kmod_cfg_t cfg; int rc; smb_load_kconfig(&cfg); rc = smb_kmod_setcfg(&cfg); if (rc != 0) return (rc); rc = smb_kmod_setgmtoff(smbd_gmtoff()); if (rc != 0) return (rc); rc = smb_kmod_start(smbd.s_door_opipe, smbd.s_door_lmshr, smbd.s_door_srv); if (rc != 0) return (rc); smbd_spool_init(); return (0); }