| version 1.1, 2009/11/12 10:35:55 | version 1.2.2.1, 2011/06/13 20:04:12 | 
| Line 15  char szUser[MAX_STR], szMount[MAXPATHLEN], szDev[MAXPA | Line 15  char szUser[MAX_STR], szMount[MAXPATHLEN], szDev[MAXPA | 
 | szChroot[MAXPATHLEN], szSess[MAXPATHLEN], szConfig[MAXPATHLEN]; | szChroot[MAXPATHLEN], szSess[MAXPATHLEN], szConfig[MAXPATHLEN]; | 
 | extern char compiled[], compiledby[], compilehost[]; | extern char compiled[], compiledby[], compilehost[]; | 
 |  |  | 
 |  |  | 
 | static void Usage() | static void Usage() | 
 | { | { | 
 |  |  | 
| Line 24  static void Usage() | Line 25  static void Usage() | 
 | "\t-v\t\tVerbose ...\n" | "\t-v\t\tVerbose ...\n" | 
 | "\t-c <dir>\tAfter execute chroot to dir [default=/]\n" | "\t-c <dir>\tAfter execute chroot to dir [default=/]\n" | 
 | "\t-u <user>\tAfter execute suid to user [default=root]\n" | "\t-u <user>\tAfter execute suid to user [default=root]\n" | 
| "\t-d <dev>\tOther device [default=/dev/ufs/AITBSDonCF]\n" | "\t-d <dev>\tOther device [default=/dev/ufs/elwix]\n" | 
 | "\t-m <mnt>\tOther mount dir [default=/cf]\n" | "\t-m <mnt>\tOther mount dir [default=/cf]\n" | 
 | "\t-t <sec>\tTimeout for autolock mount dir after seconds [default=300]\n" | "\t-t <sec>\tTimeout for autolock mount dir after seconds [default=300]\n" | 
 | "\n", compiled, compiledby, compilehost); | "\n", compiled, compiledby, compilehost); | 
| Line 36  static int update(int flags) | Line 37  static int update(int flags) | 
 |  |  | 
 | memset(&mnt, 0, sizeof mnt); | memset(&mnt, 0, sizeof mnt); | 
 | mnt.fspec = szDev; | mnt.fspec = szDev; | 
 |  | #ifdef __NetBSD__ | 
 |  | if (mount("ufs", szMount, flags, &mnt, sizeof mnt) == -1) { | 
 |  | #else | 
 | if (mount("ufs", szMount, flags, &mnt) == -1) { | if (mount("ufs", szMount, flags, &mnt) == -1) { | 
 |  | #endif | 
 | printf("Error:: can`t update mount %s #%d - %s\n", szMount, errno, strerror(errno)); | printf("Error:: can`t update mount %s #%d - %s\n", szMount, errno, strerror(errno)); | 
 | return -1; | return -1; | 
 | } | } | 
| Line 87  static int mkevent(struct kevent *chg, struct kevent * | Line 92  static int mkevent(struct kevent *chg, struct kevent * | 
 | memset(chg, 0, sizeof(struct kevent)); | memset(chg, 0, sizeof(struct kevent)); | 
 | memset(evt, 0, sizeof(struct kevent)); | memset(evt, 0, sizeof(struct kevent)); | 
 |  |  | 
| EV_SET(chg, f, EVFILT_VNODE, EV_ADD, NOTE_DELETE | NOTE_RENAME | NOTE_REVOKE, 0, NULL); | EV_SET(chg, f, EVFILT_VNODE, EV_ADD, NOTE_DELETE | NOTE_RENAME | NOTE_REVOKE, 0, (intptr_t) NULL); | 
 | } | } | 
 |  |  | 
 | return f; | return f; | 
| Line 98  static int mkevent(struct kevent *chg, struct kevent * | Line 103  static int mkevent(struct kevent *chg, struct kevent * | 
 | int main(int argc, char **argv) | int main(int argc, char **argv) | 
 | { | { | 
 | char ch; | char ch; | 
| const char *err; | const char *err = NULL; | 
 | struct kevent chg, evt; | struct kevent chg, evt; | 
 | struct timespec ts; | struct timespec ts; | 
 | pid_t pid; | pid_t pid; | 
| Line 109  int main(int argc, char **argv) | Line 114  int main(int argc, char **argv) | 
 | // Load variables from config if exists | // Load variables from config if exists | 
 | if (!LoadConfig(szConfig, &cfg)) { | if (!LoadConfig(szConfig, &cfg)) { | 
 | cfg_LoadAttribute(&cfg, CFG("cfexec"), CFG("timeout"), CFG(szUser), MAX_STR, DEFAULT_TIMEOUT); | cfg_LoadAttribute(&cfg, CFG("cfexec"), CFG("timeout"), CFG(szUser), MAX_STR, DEFAULT_TIMEOUT); | 
| Timeout = strtonum(szUser, 1, 3600, &err); | #ifndef HAVE_STRTONUM | 
| if (!Timeout) { | Timeout = (int) strtol(szUser, NULL, 0); | 
|  | #else | 
|  | Timeout = strtonum(szUser, 0, 3600, &err); | 
|  | #endif | 
|  | if (!Timeout && err) { | 
 | printf("Error:: in seconds for timeout %s - %s\n", optarg, err); | printf("Error:: in seconds for timeout %s - %s\n", optarg, err); | 
 | UnloadConfig(&cfg); | UnloadConfig(&cfg); | 
 | return 1; | return 1; | 
| Line 148  int main(int argc, char **argv) | Line 157  int main(int argc, char **argv) | 
 | strlcpy(szMount, optarg, MAXPATHLEN); | strlcpy(szMount, optarg, MAXPATHLEN); | 
 | break; | break; | 
 | case 't': | case 't': | 
| Timeout = strtonum(optarg, 1, 3600, &err); | #ifndef HAVE_STRTONUM | 
| if (!Timeout) { | Timeout = (int) strtol(szUser, NULL, 0); | 
|  | #else | 
|  | Timeout = strtonum(optarg, 0, 3600, &err); | 
|  | #endif | 
|  | if (!Timeout && err) { | 
 | printf("Error:: in seconds for timeout %s - %s\n", | printf("Error:: in seconds for timeout %s - %s\n", | 
 | optarg, err); | optarg, err); | 
 | return 1; | return 1; | 
| Line 190  int main(int argc, char **argv) | Line 203  int main(int argc, char **argv) | 
 | if ((f = mkevent(&chg, &evt)) == -1) | if ((f = mkevent(&chg, &evt)) == -1) | 
 | return 5; | return 5; | 
 |  |  | 
| memset(&ts, 0, sizeof ts); | if (Timeout) { | 
| ts.tv_sec = Timeout; | memset(&ts, 0, sizeof ts); | 
| switch (kevent(kq, &chg, 1, &evt, 1, &ts)) { | ts.tv_sec = Timeout; | 
|  | } | 
|  | switch (kevent(kq, &chg, 1, &evt, 1, !Timeout ? NULL : &ts)) { | 
 | case -1: | case -1: | 
 | printf("Error:: can`t execute safe mount #%d - %s\n", | printf("Error:: can`t execute safe mount #%d - %s\n", | 
 | errno, strerror(errno)); | errno, strerror(errno)); | 
| Line 236  int main(int argc, char **argv) | Line 251  int main(int argc, char **argv) | 
 | if (strncmp(szUser, "root", 5)) | if (strncmp(szUser, "root", 5)) | 
 | setuser(); | setuser(); | 
 |  |  | 
| chdir("/"); | /* chdir("/"); */ | 
 | execvp(*argv, argv); | execvp(*argv, argv); | 
 | } | } | 
 | _exit(127); | _exit(127); |