... | ... |
@@ -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 |
|
... | ... |
@@ -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){ |