Diff for /embedtools/src/cfexec.c between versions 1.5.20.1 and 1.5.20.5

version 1.5.20.1, 2017/10/08 21:57:34 version 1.5.20.5, 2017/10/08 22:34:41
Line 66  Usage() Line 66  Usage()
                 "\t-d <dev>\tOther device [default=/dev/ufs/elwix]\n"                  "\t-d <dev>\tOther device [default=/dev/ufs/elwix]\n"
                 "\t-m <mnt>\tOther mount dir [default=/]\n"                  "\t-m <mnt>\tOther mount dir [default=/]\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"
                "\t-L <reason>\tService lock and own RW state of device with reason\n"                "\t-L <reason>\tService lock and set RW state of device with reason\n"
                "\t-U \t\tService unlock and change RO state of device\n"                "\t-U \t\tService unlock and set RO state of device\n"
                 "\n", compiled, compiledby, compilehost);                  "\n", compiled, compiledby, compilehost);
 }  }
   
Line 126  mkevent(struct kevent *chg, struct kevent *evt) Line 126  mkevent(struct kevent *chg, struct kevent *evt)
         }          }
         VERB(3) printf("Created lock file %s\n", szSess);          VERB(3) printf("Created lock file %s\n", szSess);
   
        kq = kqueue();        if (chg && evt) {
        if (kq == -1) {                kq = kqueue();
                printf("Error:: can`t execute safe mount #%d - %s\n", errno, strerror(errno));                if (kq == -1) {
                close(f);                        printf("Error:: can`t execute safe mount #%d - %s\n", errno, strerror(errno));
                unlink(szSess);                        close(f);
                return -1;                        unlink(szSess);
        } else {                        return -1;
                memset(chg, 0, sizeof(struct kevent));                } else {
                memset(evt, 0, sizeof(struct kevent));                        memset(chg, 0, sizeof(struct kevent));
                         memset(evt, 0, sizeof(struct kevent));
   
                EV_SET(chg, f, EVFILT_VNODE, EV_ADD, NOTE_DELETE | NOTE_RENAME | NOTE_REVOKE,                         EV_SET(chg, f, EVFILT_VNODE, EV_ADD, NOTE_DELETE | NOTE_RENAME | NOTE_REVOKE, 
                                0, NULL);                                        0, NULL);
                 }
         }          }
   
         return f;          return f;
Line 158  static int Line 160  static int
 s_unlck()  s_unlck()
 {  {
         if (access(szSLCK, F_OK))          if (access(szSLCK, F_OK))
                return 1;                return 2;
   
        if (update(MNT_UPDATE | MNT_RDONLY) == -1)        if (access(szSess, F_OK) && update(MNT_UPDATE | MNT_RDONLY) == -1)
                 return 8;                  return 8;
   
         unlink(szSLCK);          unlink(szSLCK);
Line 175  s_lck(const char *reason) Line 177  s_lck(const char *reason)
         char szStr[STRSIZ];          char szStr[STRSIZ];
   
         if (!access(szSLCK, F_OK)) {          if (!access(szSLCK, F_OK)) {
                printf("cfexec:: Service held lock ...\n");                printf("cfexec already held service lock ...\n");
                 return 127;                  return 127;
         }          }
   
         f = open(szSLCK, O_CREAT | O_WRONLY | O_TRUNC, 0644);          f = open(szSLCK, O_CREAT | O_WRONLY | O_TRUNC, 0644);
         if (f == -1) {          if (f == -1) {
                 printf("Error:: can`t service lock session #%d - %s\n", errno, strerror(errno));                  printf("Error:: can`t service lock session #%d - %s\n", errno, strerror(errno));
                return -1;                return 4;
         } else {          } else {
                 memset(szStr, 0, sizeof szStr);                  memset(szStr, 0, sizeof szStr);
                 snprintf(szStr, sizeof szStr, "[%d] - %s", getpid(), reason);                  snprintf(szStr, sizeof szStr, "[%d] - %s", getpid(), reason);
Line 192  s_lck(const char *reason) Line 194  s_lck(const char *reason)
   
         if (update(MNT_UPDATE) == -1) {          if (update(MNT_UPDATE) == -1) {
                 unlink(szSLCK);                  unlink(szSLCK);
                return 4;                return 5;
         }          }
   
         VERB(3) printf("Lock & created service lock file %s\n", szSLCK);          VERB(3) printf("Lock & created service lock file %s\n", szSLCK);
Line 320  main(int argc, char **argv) Line 322  main(int argc, char **argv)
                                 VERB(5) printf("Info(5):: Go safe mount.\n");                                  VERB(5) printf("Info(5):: Go safe mount.\n");
                                 setsid();                                  setsid();
   
                                if (update(MNT_UPDATE) == -1)                                if ((f = mkevent(&chg, &evt)) == -1)
                                         return 4;                                          return 4;
   
                                if ((f = mkevent(&chg, &evt)) == -1)                                if (update(MNT_UPDATE) == -1)
                                         return 5;                                          return 5;
   
                                 if (Timeout) {                                  if (Timeout) {
Line 361  main(int argc, char **argv) Line 363  main(int argc, char **argv)
                 sigprocmask(SIG_BLOCK, &sig, &oldsig);                  sigprocmask(SIG_BLOCK, &sig, &oldsig);
                 */                  */
   
                if (update(MNT_UPDATE) == -1)                if ((f = mkevent(NULL, NULL)) == -1)
                         return 4;                          return 4;
                   else
                           close(f);
   
                   if (update(MNT_UPDATE) == -1)
                           return 5;
   
                 switch ((pid = vfork())) {                  switch ((pid = vfork())) {
                         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));
                                return 5;                                stat = 3;
                                 break;
                         case 0:                          case 0:
                                 VERB(5) printf("Go to running process %s\n", *argv);                                  VERB(5) printf("Go to running process %s\n", *argv);
                                 if (chroot(AIT_GET_STR(&Chroot)) == -1) {                                  if (chroot(AIT_GET_STR(&Chroot)) == -1) {
Line 381  main(int argc, char **argv) Line 389  main(int argc, char **argv)
                                         /* chdir("/"); */                                          /* chdir("/"); */
                                         execvp(*argv, argv);                                          execvp(*argv, argv);
                                 }                                  }
                                exit(127);                                _exit(127);
                                 break;                                  break;
                         default:                          default:
                                 waitpid(pid, &stat, 0);                                  waitpid(pid, &stat, 0);
                                   stat = WEXITSTATUS(stat);
                                 VERB(3) printf("Return code: %d\n", stat);                                  VERB(3) printf("Return code: %d\n", stat);
                                 if (stat == 32512)   
                                         stat = 127;  
   
                                 if (access(szSLCK, F_OK) && update(MNT_UPDATE | MNT_RDONLY) == -1)                                  if (access(szSLCK, F_OK) && update(MNT_UPDATE | MNT_RDONLY) == -1)
                                        return 8;                                        stat = 8;
                                 break;
                 }                  }
   
                   unlink(szSess);
         }          }
   
         return stat;          return stat;

Removed from v.1.5.20.1  
changed lines
  Added in v.1.5.20.5


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>