Masanobu Yasui authored on 2008/12/24 16:12:05
Showing 10 changed files
... ...
@@ -1,3 +1,5 @@
1
+1.1.2:
2
+
1 3
 1.1.1:
2 4
  - error message output in detail
3 5
 
... ...
@@ -1,5 +1,5 @@
1 1
 bin_PROGRAMS = msync
2 2
 sbin_PROGRAMS = makuosan
3
-makuosan_SOURCES = makuosan.c common.c mexec.c minit.c mrecv.c msend.c makuosan.h
3
+makuosan_SOURCES = makuosan.c common.c mexec.c minit.c mexit.c mrecv.c msend.c makuosan.h
4 4
 msync_SOURCES = msync.c 
5 5
 EXTRA_DIST = support
... ...
@@ -51,8 +51,8 @@ binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
51 51
 sbinPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
52 52
 PROGRAMS = $(bin_PROGRAMS) $(sbin_PROGRAMS)
53 53
 am_makuosan_OBJECTS = makuosan.$(OBJEXT) common.$(OBJEXT) \
54
-	mexec.$(OBJEXT) minit.$(OBJEXT) mrecv.$(OBJEXT) \
55
-	msend.$(OBJEXT)
54
+	mexec.$(OBJEXT) minit.$(OBJEXT) mexit.$(OBJEXT) \
55
+	mrecv.$(OBJEXT) msend.$(OBJEXT)
56 56
 makuosan_OBJECTS = $(am_makuosan_OBJECTS)
57 57
 makuosan_LDADD = $(LDADD)
58 58
 am_msync_OBJECTS = msync.$(OBJEXT)
... ...
@@ -165,7 +165,7 @@ sysconfdir = @sysconfdir@
165 165
 target_alias = @target_alias@
166 166
 top_builddir = @top_builddir@
167 167
 top_srcdir = @top_srcdir@
168
-makuosan_SOURCES = makuosan.c common.c mexec.c minit.c mrecv.c msend.c makuosan.h
168
+makuosan_SOURCES = makuosan.c common.c mexec.c minit.c mexit.c mrecv.c msend.c makuosan.h
169 169
 msync_SOURCES = msync.c 
170 170
 EXTRA_DIST = support
171 171
 all: config.h
... ...
@@ -285,6 +285,7 @@ distclean-compile:
285 285
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/common.Po@am__quote@
286 286
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/makuosan.Po@am__quote@
287 287
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mexec.Po@am__quote@
288
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mexit.Po@am__quote@
288 289
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minit.Po@am__quote@
289 290
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mrecv.Po@am__quote@
290 291
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/msend.Po@am__quote@
... ...
@@ -1038,41 +1038,6 @@ int space_escape(char *str)
1038 1038
   return(r);
1039 1039
 }
1040 1040
 
1041
-void chexit()
1042
-{
1043
-  struct utsname uts;
1044
-  char cwd[PATH_MAX];
1045
-  if(moption.chroot){
1046
-    if(uname(&uts) == -1){
1047
-      return;
1048
-    }
1049
-    if(strcmp("Linux", uts.sysname)){
1050
-      return;
1051
-    }
1052
-    /*----- chroot exit(linux only) -----*/
1053
-    mtempname("",".MAKUOWORK",cwd);
1054
-    mkdir(cwd,0700);
1055
-    chroot(cwd);
1056
-    rmdir(cwd);
1057
-    chdir("..");
1058
-    getcwd(cwd,PATH_MAX);
1059
-    while(strcmp("/", cwd)){
1060
-      chdir("..");
1061
-      getcwd(cwd,PATH_MAX);
1062
-    }
1063
-    chroot(".");
1064
-  }
1065
-  return;
1066
-}
1067
-
1068
-void restoreguid()
1069
-{
1070
-  if(getuid() != geteuid())
1071
-    seteuid(getuid());
1072
-  if(getgid() != getegid())
1073
-    setegid(getgid());
1074
-}
1075
-
1076 1041
 mfile *mkreq(mdata *data, struct sockaddr_in *addr, uint8_t state)
1077 1042
 {
1078 1043
   mfile *a;
... ...
@@ -1,6 +1,6 @@
1 1
 #! /bin/sh
2 2
 # Guess values for system-dependent variables and create Makefiles.
3
-# Generated by GNU Autoconf 2.61 for makuosan 1.1.1.
3
+# Generated by GNU Autoconf 2.61 for makuosan 1.1.2.
4 4
 #
5 5
 # Report bugs to <info-makuosan@klab.jp>.
6 6
 #
... ...
@@ -574,8 +574,8 @@ SHELL=${CONFIG_SHELL-/bin/sh}
574 574
 # Identity of this package.
575 575
 PACKAGE_NAME='makuosan'
576 576
 PACKAGE_TARNAME='makuosan'
577
-PACKAGE_VERSION='1.1.1'
578
-PACKAGE_STRING='makuosan 1.1.1'
577
+PACKAGE_VERSION='1.1.2'
578
+PACKAGE_STRING='makuosan 1.1.2'
579 579
 PACKAGE_BUGREPORT='info-makuosan@klab.jp'
580 580
 
581 581
 ac_unique_file="makuosan.c"
... ...
@@ -1209,7 +1209,7 @@ if test "$ac_init_help" = "long"; then
1209 1209
   # Omit some internal or obsolete options to make the list less imposing.
1210 1210
   # This message is too long to be a string in the A/UX 3.1 sh.
1211 1211
   cat <<_ACEOF
1212
-\`configure' configures makuosan 1.1.1 to adapt to many kinds of systems.
1212
+\`configure' configures makuosan 1.1.2 to adapt to many kinds of systems.
1213 1213
 
1214 1214
 Usage: $0 [OPTION]... [VAR=VALUE]...
1215 1215
 
... ...
@@ -1275,7 +1275,7 @@ fi
1275 1275
 
1276 1276
 if test -n "$ac_init_help"; then
1277 1277
   case $ac_init_help in
1278
-     short | recursive ) echo "Configuration of makuosan 1.1.1:";;
1278
+     short | recursive ) echo "Configuration of makuosan 1.1.2:";;
1279 1279
    esac
1280 1280
   cat <<\_ACEOF
1281 1281
 
... ...
@@ -1360,7 +1360,7 @@ fi
1360 1360
 test -n "$ac_init_help" && exit $ac_status
1361 1361
 if $ac_init_version; then
1362 1362
   cat <<\_ACEOF
1363
-makuosan configure 1.1.1
1363
+makuosan configure 1.1.2
1364 1364
 generated by GNU Autoconf 2.61
1365 1365
 
1366 1366
 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
... ...
@@ -1374,7 +1374,7 @@ cat >config.log <<_ACEOF
1374 1374
 This file contains any messages produced by compilers while
1375 1375
 running configure, to aid debugging if configure makes a mistake.
1376 1376
 
1377
-It was created by makuosan $as_me 1.1.1, which was
1377
+It was created by makuosan $as_me 1.1.2, which was
1378 1378
 generated by GNU Autoconf 2.61.  Invocation command line was
1379 1379
 
1380 1380
   $ $0 $@
... ...
@@ -2065,7 +2065,7 @@ fi
2065 2065
 
2066 2066
 # Define the identity of the package.
2067 2067
  PACKAGE='makuosan'
2068
- VERSION='1.1.1'
2068
+ VERSION='1.1.2'
2069 2069
 
2070 2070
 
2071 2071
 cat >>confdefs.h <<_ACEOF
... ...
@@ -9005,7 +9005,7 @@ exec 6>&1
9005 9005
 # report actual input values of CONFIG_FILES etc. instead of their
9006 9006
 # values after options handling.
9007 9007
 ac_log="
9008
-This file was extended by makuosan $as_me 1.1.1, which was
9008
+This file was extended by makuosan $as_me 1.1.2, which was
9009 9009
 generated by GNU Autoconf 2.61.  Invocation command line was
9010 9010
 
9011 9011
   CONFIG_FILES    = $CONFIG_FILES
... ...
@@ -9062,7 +9062,7 @@ Report bugs to <bug-autoconf@gnu.org>."
9062 9062
 _ACEOF
9063 9063
 cat >>$CONFIG_STATUS <<_ACEOF
9064 9064
 ac_cs_version="\\
9065
-makuosan config.status 1.1.1
9065
+makuosan config.status 1.1.2
9066 9066
 configured by $0, generated by GNU Autoconf 2.61,
9067 9067
   with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
9068 9068
 
... ...
@@ -1,7 +1,7 @@
1 1
 #                                               -*- Autoconf -*-
2 2
 # Process this file with autoconf to produce a configure script.
3 3
 AC_PREREQ(2.61)
4
-AC_INIT(makuosan, 1.1.1, info-makuosan@klab.jp)
4
+AC_INIT(makuosan, 1.1.2, info-makuosan@klab.jp)
5 5
 AM_INIT_AUTOMAKE
6 6
 AC_CONFIG_SRCDIR([makuosan.c])
7 7
 AC_CONFIG_HEADER([config.h])
... ...
@@ -68,30 +68,6 @@ struct timeval *pingpong(int n)
68 68
   return(&tv);
69 69
 }
70 70
 
71
-int cleanup()
72
-{
73
-  mfile *m;
74
-  socklen_t namelen;
75
-  struct sockaddr_un addr;
76
-
77
-  /*----- exit notify -----*/
78
-  pingpong(2);
79
-  msend(moption.mcsocket, mftop[0]);
80
-
81
-  /*----- unlink unix domain socket -----*/
82
-  namelen=sizeof(addr);
83
-  if(!getsockname(moption.lisocket, (struct sockaddr *)&addr, &namelen)){
84
-    if(addr.sun_family == AF_UNIX){
85
-      unlink(addr.sun_path);
86
-    }
87
-  }
88
-
89
-  /*----- close -----*/
90
-  close(moption.mcsocket);
91
-  close(moption.lisocket);
92
-  return(0);
93
-}
94
-
95 71
 int mcomm_accept(mcomm *c, fd_set *fds, int s)
96 72
 {
97 73
   int i;
... ...
@@ -235,7 +211,7 @@ int ismsend(int s, mfile *m, int flag)
235 235
 }
236 236
 
237 237
 /***** main loop *****/
238
-int mloop()
238
+void mloop()
239 239
 {
240 240
   int para;
241 241
   mfile *n;
... ...
@@ -294,18 +270,8 @@ int mloop()
294 294
     mcomm_read(moption.comm, &rfds);                     /* command exec */
295 295
     mrecv_gc();
296 296
   }
297
-  return(0);
298
-}
299
-
300
-void mexit()
301
-{
302
-  lprintf(0, "%s: shutdown start\n", __func__);
303
-  msend_clean(); /* recv object free         */
304
-  mrecv_clean(); /* recv object free         */
305
-  restoreguid(); /* euid,egidを元に戻す      */
306
-  chexit();      /* chrootから脱出(LinuxOnly)*/
307
-  cleanup();     /* ディスクリプタの開放など */
308
-  lprintf(0, "%s: shutdown complete\n", __func__);
297
+  pingpong(2); /* exit notify */
298
+  msend(moption.mcsocket, mftop[0]);
309 299
 }
310 300
 
311 301
 int main(int argc, char *argv[])
... ...
@@ -22,12 +22,10 @@
22 22
 #include <getopt.h>
23 23
 #include <pwd.h>
24 24
 #include <grp.h>
25
-#include <poll.h>
26 25
 #include <libgen.h>
27 26
 #include <fnmatch.h>
28 27
 #include <stdarg.h>
29 28
 #include <syslog.h>
30
-#include <pthread.h>
31 29
 #include <sys/stat.h>
32 30
 #include <sys/wait.h>
33 31
 #include <sys/types.h>
... ...
@@ -282,62 +280,81 @@ extern char TZ[256];
282 282
 extern struct timeval curtime;
283 283
 extern BF_KEY EncKey;
284 284
 
285
-/*----- function -----*/
286
-char    *strsstate(uint8_t n);
287
-char    *strrstate(uint8_t n);
288
-char    *strmstate(mdata *data);
289
-char    *stropcode(mdata *data);
290
-char    *strackreq(mdata *data);
291
-void     mprintf(const char *func, mfile *m);
292
-void     lprintf(int l, char *fmt, ...);
293
-void     cprintf(int l, mcomm *c, char *fmt, ...);
294
-void     fdprintf(int s, char *fmt, ...);
295
-int      getrid();
296
-void     chexit();
297
-void     restoreguid();
298
-void     mrecv_clean();
299
-void     msend_clean();
300
-void     mfdel(mfile *m);
301
-mfile   *mfadd(int n);
302
-mfile   *mfins(int n);
303
-mfile   *mkreq(mdata *data, struct sockaddr_in *addr, uint8_t state);
304
-mfile   *mkack(mdata *data, struct sockaddr_in *addr, uint8_t state);
305
-mhost   *member_get(struct in_addr *addr);
306
-mhost   *member_add(struct in_addr *addr, mdata *recvdata);
307
-void     member_del(mhost *h);
308
-int      mrecv(int s);
309
-void     msend(int s, mfile *m);
310
-void     set_filestat(char *path, uid_t uid, gid_t gid, mode_t mode);
311
-int      set_guid(uid_t uid, gid_t gid, gid_t *gids);
312
-int      set_gids(char *groups);
285
+/*----- report -----*/
286
+char *strsstate(uint8_t n);
287
+char *strrstate(uint8_t n);
288
+char *strmstate(mdata *data);
289
+char *stropcode(mdata *data);
290
+char *strackreq(mdata *data);
291
+void mprintf(const char *func, mfile *m);
292
+void lprintf(int l, char *fmt, ...);
293
+void cprintf(int l, mcomm *c, char *fmt, ...);
294
+void fdprintf(int s, char *fmt, ...);
295
+
296
+/*----- packet data access -----*/
297
+int data_safeget(mdata *data, void *buff, size_t size);
298
+int data_safeget16(mdata *data, uint16_t *buff);
299
+int data_safeget32(mdata *data, uint32_t *buff);
300
+int data_safeset(mdata *data, void *buff, size_t size);
301
+int data_safeset16(mdata *data, uint16_t val);
302
+int data_safeset32(mdata *data, uint32_t val);
303
+
304
+/*----- file object operation -----*/
305
+void mfdel(mfile *m);
306
+mfile *mfadd(int n);
307
+mfile *mfins(int n);
308
+mfile *mkreq(mdata *data, struct sockaddr_in *addr, uint8_t state);
309
+mfile *mkack(mdata *data, struct sockaddr_in *addr, uint8_t state);
310
+
311
+/*----- exclude functions -----*/
312
+excludeitem *exclude_add(excludeitem *exclude, char *pattern);  /* add list */
313
+excludeitem *exclude_del(excludeitem *e);                       /* del list */
314
+excludeitem *mfnmatch(char *str, excludeitem *exclude);         /* is match */
315
+int isexclude(char *fn, excludeitem *exclude, int dir);         /*          */
316
+
317
+/*----- filesystem operation -----*/
318
+int statcmp(struct stat *s1, struct stat *s2);
319
+int mremove(char *base, char *name);
320
+int mcreatedir(char  *base, char *name, mode_t mode);
321
+int mcreatefile(char *base, char *name, mode_t mode);
322
+int mcreatelink(char *base, char *name, char *link);
323
+void set_filestat(char *path, uid_t uid, gid_t gid, mode_t mode);
324
+
325
+/*----- uid/gid -----*/
326
+int set_guid(uid_t uid, gid_t gid, gid_t *gids);
327
+int set_gids(char *groups);
328
+
329
+/*----- node operation -----*/
330
+void   member_del(mhost *h);
331
+mhost *member_get(struct in_addr *addr);
332
+mhost *member_add(struct in_addr *addr, mdata *recvdata);
333
+
334
+/*----- mark operation -----*/
313 335
 mmark   *delmark(mmark *mm);
314 336
 uint32_t seq_getmark(mfile *m);
315 337
 void     seq_setmark(mfile *m, uint32_t lseq, uint32_t useq);
316 338
 void     seq_addmark(mfile *m, uint32_t lseq, uint32_t useq);
317 339
 int      seq_delmark(mfile *m, uint32_t seq);
318
-int      linkcmp(mfile *m);
319
-int      statcmp(struct stat *s1, struct stat *s2);
320
-int      mremove(char *base, char *name);
321
-int      mcreatedir(char  *base, char *name, mode_t mode);
322
-int      mcreatefile(char *base, char *name, mode_t mode);
323
-int      mcreatelink(char *base, char *name, char *link);
324
-int      space_escape(char *str);
325
-int      workend(mcomm *c);
340
+
341
+/*----- status operation -----*/
342
+int      ack_clear(mfile *m, int state);
343
+int      ack_check(mfile *m, int state);
326 344
 void     clr_hoststate(mfile *m);
327 345
 uint8_t *get_hoststate(mhost *t, mfile *m);
328 346
 uint8_t *set_hoststate(mhost *t, mfile *m, uint8_t state);
329
-int      ack_clear(mfile *m, int state);
330
-int      ack_check(mfile *m, int state);
331
-int      mtimeget(struct timeval *tv);
332
-int      mtimeout(struct timeval *tf, uint32_t msec);
333
-int      data_safeget(mdata *data, void *buff, size_t size);
334
-int      data_safeget16(mdata *data, uint16_t *buff);
335
-int      data_safeget32(mdata *data, uint32_t *buff);
336
-int      data_safeset(mdata *data, void *buff, size_t size);
337
-int      data_safeset16(mdata *data, uint16_t val);
338
-int      data_safeset32(mdata *data, uint32_t val);
339
-int      isexclude(char *fn, excludeitem *exclude, int dir);
340
-excludeitem *exclude_add(excludeitem *exclude, char *pattern);
341
-excludeitem *exclude_del(excludeitem *e);
342
-excludeitem *mfnmatch(char *str, excludeitem *exclude);
347
+
348
+/*----- send/receive -----*/
349
+void mrecv_clean();
350
+void msend_clean();
351
+int  mrecv(int s);
352
+void msend(int s, mfile *m);
353
+
354
+/*----- other -----*/
355
+int getrid();
356
+int linkcmp(mfile *m);
357
+int space_escape(char *str);
358
+int workend(mcomm *c);
359
+int mtimeget(struct timeval *tv);
360
+int mtimeout(struct timeval *tf, uint32_t msec);
361
+
343 362
 
... ...
@@ -535,7 +535,7 @@ static void minit_bootlog()
535 535
 
536 536
 /*
537 537
  *  まくお初期化関数
538
- *  main関数から呼び出される
538
+ *  mainから呼び出される
539 539
  */
540 540
 void minit(int argc, char *argv[])
541 541
 {
... ...
@@ -72,13 +72,16 @@ static int msend_packet(int s, mdata *data, struct sockaddr_in *addr)
72 72
   senddata.head.error  = htonl(senddata.head.error);
73 73
   szdata += sizeof(mhead);
74 74
  
75
-  while(loop_flag){ 
75
+  while(1){ 
76 76
     FD_ZERO(&fds);
77 77
     FD_SET(moption.mcsocket, &fds);
78 78
     tv.tv_sec  = 1;
79 79
     tv.tv_usec = 0;
80 80
     if(select(1024, NULL, &fds, NULL, &tv) != 1){
81
-      continue;
81
+      if(loop_flag){
82
+        continue;
83
+      }
84
+      break;
82 85
     }
83 86
     r = sendto(s, &senddata, szdata, 0, (struct sockaddr*)addr, sizeof(struct sockaddr_in));
84 87
     if(r == szdata){