Annotation of src/usr.bin/rdist/client.h, Revision 1.4
1.4 ! jmc 1: /* $OpenBSD: client.h,v 1.3 2017/08/30 07:42:52 otto Exp $ */
1.1 guenther 2:
3: #ifndef __CLIENT_H__
4: #define __CLIENT_H__
5: /*
6: * Copyright (c) 1983 Regents of the University of California.
7: * All rights reserved.
8: *
9: * Redistribution and use in source and binary forms, with or without
10: * modification, are permitted provided that the following conditions
11: * are met:
12: * 1. Redistributions of source code must retain the above copyright
13: * notice, this list of conditions and the following disclaimer.
14: * 2. Redistributions in binary form must reproduce the above copyright
15: * notice, this list of conditions and the following disclaimer in the
16: * documentation and/or other materials provided with the distribution.
17: * 3. Neither the name of the University nor the names of its contributors
18: * may be used to endorse or promote products derived from this software
19: * without specific prior written permission.
20: *
21: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31: * SUCH DAMAGE.
32: */
33:
34: /*
35: * $From: defs.h,v 1.6 2001/03/12 18:16:30 kim Exp $
36: * @(#)defs.h 5.2 (Berkeley) 3/20/86
37: */
38:
39: #include <sys/stat.h>
40: #include <regex.h>
41: #include <stdio.h>
42:
43: #include "defs.h"
44:
45: /* lexical definitions */
1.3 otto 46: #define QUOTECHAR 160U /* quote next character */
1.1 guenther 47:
48: /* table sizes */
49: #define HASHSIZE 1021
50: #define INMAX 3500
51:
52: /* expand type definitions */
53: #define E_VARS 0x1
54: #define E_SHELL 0x2
55: #define E_TILDE 0x4
56: #define E_ALL 0x7
57:
58: /* actions for lookup() */
59: #define LOOKUP 0
60: #define INSERT 1
61: #define REPLACE 2
62:
1.2 mmcc 63: #define ALLOC(x) xmalloc(sizeof(struct x))
1.1 guenther 64: #define A(s) ((s) ? s : "<null>")
65:
66:
67: #define COMMENT_CHAR '#' /* Config file comment char */
68:
69:
70: /*
71: * Name list
72: */
73: struct namelist { /* for making lists of strings */
74: char *n_name;
75: regex_t *n_regex;
76: struct namelist *n_next;
77: };
78:
79: /*
80: * Sub command structure
81: */
82: struct subcmd {
83: short sc_type; /* type - INSTALL,NOTIFY,EXCEPT,SPECIAL */
84: opt_t sc_options;
85: char *sc_name;
86: struct namelist *sc_args;
87: struct subcmd *sc_next;
88: };
89:
90: /*
91: * Cmd flags
92: */
93: #define CMD_ASSIGNED 0x01 /* This entry has been assigned */
94: #define CMD_CONNFAILED 0x02 /* Connection failed */
95: #define CMD_NOCHKNFS 0x04 /* Disable NFS checks */
96:
97: /*
98: * General command structure
99: */
100: struct cmd {
101: int c_type; /* type - ARROW,DCOLON */
102: int c_flags; /* flags - CMD_USED,CMD_FAILED */
103: char *c_name; /* hostname or time stamp file name */
104: char *c_label; /* label for partial update */
105: struct namelist *c_files;
106: struct subcmd *c_cmds;
107: struct cmd *c_next;
108: };
109:
110: /*
111: * Hard link buffer information
112: */
113: struct linkbuf {
114: ino_t inum;
115: dev_t devnum;
116: int count;
117: char *pathname;
118: char *src;
119: char *target;
120: struct linkbuf *nextp;
121: };
122:
123: extern char *path_remsh; /* Remote shell command */
124: extern char host[]; /* Host name of master copy */
125: extern char **realargv; /* Real argv */
126: extern char *homedir; /* User's $HOME */
127: extern int do_fork; /* Should we do fork()'ing */
128: extern int nflag; /* NOP flag, don't execute commands */
129: extern int realargc; /* Real argc */
130: extern int setjmp_ok; /* setjmp/longjmp flag */
131: extern int maxchildren; /* Max active children */
132: extern int64_t min_freespace; /* Min filesys free space */
133: extern int64_t min_freefiles; /* Min filesys free # files */
134: extern struct linkbuf *ihead; /* list of files with more than one link */
135: extern struct subcmd *subcmds;/* list of sub-commands for current cmd */
136: extern struct namelist *filelist; /* list of source files */
137: extern struct cmd *cmds; /* Initialized by yyparse() */
138:
139: extern char target[BUFSIZ]; /* target/source directory name */
140: extern char *ptarget; /* pointer to end of target name */
141: extern int activechildren; /* Number of active children */
142: extern int amchild; /* This PID is a child */
143: extern char *path_rdistd;
144: extern char *remotemsglist;
145:
146: /*
147: * Our own declarations.
148: */
149:
150: /* child.c */
151: void waitup(void);
152: int spawn(struct cmd *, struct cmd *);
153:
154: /* client.c */
155: char *remfilename(char *, char *, char *, char *, int);
156: int inlist(struct namelist *, char *);
157: void runcmdspecial(struct cmd *, opt_t);
158: int checkfilename(char *);
159: void freelinkinfo(struct linkbuf *);
160: int install(char *, char *, int, int , opt_t);
161:
162: /* distopt.c */
163: int parsedistopts(char *, opt_t *, int);
164: char *getondistoptlist(opt_t);
165:
166: /* docmd.c */
167: void markassigned(struct cmd *, struct cmd *);
168: int okname(char *);
169: int except(char *);
170: void docmds(struct namelist *, int, char **);
171:
172: /* expand.c */
173: struct namelist *expand(struct namelist *, int);
174: u_char *xstrchr(u_char *, int);
175: void expstr(u_char *);
176: void expsh(u_char *);
177: void matchdir(char *);
178: int execbrc(u_char *, u_char *);
179: int match(char *, char *);
180: int amatch(char *, u_char *);
181:
182: /* gram.c */
183: int yylex(void);
184: int any(int, char *);
185: void insert(char *, struct namelist *, struct namelist *, struct subcmd *);
186: void append(char *, struct namelist *, char *, struct subcmd *);
187: void yyerror(char *);
188: struct namelist *makenl(char *);
189: struct subcmd *makesubcmd(int);
190: int yyparse(void);
191:
192: /* isexec.c */
193: int isexec(char *, struct stat *);
194:
195: /* lookup.c */
196: void define(char *);
197: struct namelist *lookup(char *, int, struct namelist *);
198:
199: /* rdist.c */
200: FILE *opendist(char *);
201: void docmdargs(int, char *[]);
202: char *getnlstr(struct namelist *);
203:
204: #endif /* __CLIENT_H__ */