From 56b68c7d127e762e6826ef7f624717e597ca8963 Mon Sep 17 00:00:00 2001 From: Fedor Date: Thu, 4 Jun 2009 00:14:18 -0400 Subject: [PATCH] USB lock timeout, allow non-locking USB hotplug, cosmetics --- release/src/router/nvram/defaults.c | 1 - release/src/router/rc/init.c | 11 +++++++---- release/src/router/rc/services.c | 18 ++++++++++++------ release/src/router/shared/misc.c | 18 ++++++++++++++++-- 4 files changed, 35 insertions(+), 13 deletions(-) diff --git a/release/src/router/nvram/defaults.c b/release/src/router/nvram/defaults.c index ae75744d77..8f9db1f1a7 100644 --- a/release/src/router/nvram/defaults.c +++ b/release/src/router/nvram/defaults.c @@ -517,7 +517,6 @@ const defaults_t defaults[] = { }, { "smbd_user", "nas" }, { "smbd_passwd", "" }, - { "smbd_master", "1" }, #endif // admin-sch diff --git a/release/src/router/rc/init.c b/release/src/router/rc/init.c index a6b0a107e4..1335fde69a 100644 --- a/release/src/router/rc/init.c +++ b/release/src/router/rc/init.c @@ -908,12 +908,16 @@ int init_main(int argc, char *argv[]) case START: SET_LED(RELEASE_WAN_CONTROL); - // !!TB - USB Support - int fd = usb_lock(); // hold off automount processing - start_usb(); + int fd = -1; + if (!nvram_get_int("usb_nolock")) { + fd = usb_lock(); // hold off automount processing + start_usb(); + } run_nvscript("script_init", NULL, 2); + if (nvram_get_int("usb_nolock")) + start_usb(); start_vlan(); start_lan(); start_wan(BOOT); @@ -922,7 +926,6 @@ int init_main(int argc, char *argv[]) syslog(LOG_INFO, "Tomato %s", tomato_version); syslog(LOG_INFO, "%s", nvram_safe_get("t_model_name")); - // !!TB - USB Support usb_unlock(fd); // allow to process usb hotplug events led(LED_DIAG, 0); diff --git a/release/src/router/rc/services.c b/release/src/router/rc/services.c index c7cecb5190..bb72b37698 100644 --- a/release/src/router/rc/services.c +++ b/release/src/router/rc/services.c @@ -739,7 +739,7 @@ void start_ftpd(void) if ((fp = fopen(vsftpd_conf, "w")) == NULL) return; - if (nvram_match("ftp_super", "1")) + if (nvram_get_int("ftp_super")) { /* rights */ sprintf(tmp, "%s/%s", vsftpd_users, "admin"); @@ -804,7 +804,7 @@ void start_ftpd(void) "passwd_file=%s\n", vsftpd_users, vsftpd_passwd); - if (nvram_match("log_ftp", "1")) { + if (nvram_get_int("log_ftp")) { fprintf(fp, "log_ftp_protocol=yes\n"); } else { @@ -837,7 +837,7 @@ void start_ftpd(void) "%s:%s:0:0:root:/:/sbin/nologin\n" "nobody:x:65534:65534:nobody:%s/:/sbin/nologin\n", nvram_storage_path("ftp_anonroot"), "admin", - nvram_match("ftp_super", "1") ? crypt(nvram_safe_get("http_passwd"), "$1$") : "x", + nvram_get_int("ftp_super") ? crypt(nvram_safe_get("http_passwd"), "$1$") : "x", MOUNT_ROOT); char *buf; @@ -951,17 +951,23 @@ void start_samba(void) " syslog only = yes\n" " syslog = 1\n" " encrypt passwords = yes\n" - " local master = %s\n" " preserve case = yes\n" " short preserve case = yes\n", nvram_get("lan_ifname") ? : "br0", nvram_get("smbd_wgroup") ? : "WORKGROUP", nvram_get("router_name") ? : "Tomato", mode == 2 ? "user" : "share", - nvram_get_int("smbd_loglevel"), - nvram_get_int("smbd_master") ? "yes" : "no" + nvram_get_int("smbd_loglevel") ); + if (nvram_invmatch("smbd_master", "")) { + char *master = nvram_get_int("smbd_master") ? "yes" : "no"; + fprintf(fp, + " local master = %s\n" + " preferred master = %s\n", + master, master); + } + if (nvram_invmatch("smbd_cpage", "")) { char *cp = nvram_get("smbd_cpage"); diff --git a/release/src/router/shared/misc.c b/release/src/router/shared/misc.c index 314952054c..16cf6abc1f 100644 --- a/release/src/router/shared/misc.c +++ b/release/src/router/shared/misc.c @@ -461,8 +461,16 @@ int time_ok(void) /* Serialize using fcntl() calls */ + +#ifndef USB_LOCK_TIMEOUT +#define USB_LOCK_TIMEOUT 8 +#endif + int usb_lock(void) { + if (nvram_get_int("usb_nolock")) + return -1; + const char fn[] = "/var/lock/usb.lock"; struct flock lock; int lockfd = -1; @@ -473,9 +481,15 @@ int usb_lock(void) memset(&lock, 0, sizeof(lock)); lock.l_type = F_WRLCK; lock.l_pid = getpid(); - if (fcntl(lockfd, F_SETLKW, &lock) < 0) + alarm(USB_LOCK_TIMEOUT); + + if (fcntl(lockfd, F_SETLKW, &lock) < 0) { + close(lockfd); + alarm(0); goto lock_error; + } + alarm(0); return lockfd; lock_error: // No proper error processing @@ -731,7 +745,7 @@ struct mntent *findmntent(char *file) } } - fclose(f); + endmntent(f); return mnt; } -- 2.11.4.GIT