dissertation/usr.bin/rdist/defs.h

226 lines
7.3 KiB
C

/* $OpenBSD: defs.h,v 1.39 2021/06/22 20:19:28 jmc Exp $ */
#ifndef __DEFS_H__
#define __DEFS_H__
/*
* Copyright (c) 1983 Regents of the University of California.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
/*
* $From: defs.h,v 1.6 2001/03/12 18:16:30 kim Exp $
* @(#)defs.h 5.2 (Berkeley) 3/20/86
*/
#include <pwd.h>
#include <setjmp.h>
#include <signal.h>
#ifndef __GNUC__
# ifndef __attribute__
# define __attribute__(a)
# endif
#endif
#include "version.h"
#include "config.h"
#include "pathnames.h"
#include "types.h"
/*
* Define the read and write values for the file descriptor array
* used by pipe().
*/
#define PIPE_READ 0
#define PIPE_WRITE 1
/* boolean truth */
#ifndef TRUE
#define TRUE 1
#endif
#ifndef FALSE
#define FALSE 0
#endif
/* Bit flag test macros */
#define IS_ON(b,f) (b & f)
#define IS_OFF(b,f) !(IS_ON(b,f))
#define FLAG_ON(b,f) b |= f
#define FLAG_OFF(b,f) b &= ~(f)
/*
* Environment variable names
*/
#define E_FILES "FILES" /* List of files */
#define E_LOCFILE "FILE" /* Local Filename */
#define E_REMFILE "REMFILE" /* Remote Filename */
#define E_BASEFILE "BASEFILE" /* basename of Remote File */
/*
* Get system error string
*/
#define SYSERR strerror(errno)
#define CNULL '\0' /* NULL character */
/*
* These are the top level protocol commands.
*/
#define C_NONE '=' /* No command - pass cleanly */
#define C_ERRMSG '\1' /* Log an error message */
#define C_FERRMSG '\2' /* Log a fatal error message */
#define C_NOTEMSG '\3' /* Log a note message */
#define C_LOGMSG '\4' /* Log a message */
#define C_ACK '\5' /* Acknowledge */
#define C_SETCONFIG 'c' /* Set configuration parameters */
#define C_DIRTARGET 'T' /* Set target directory name */
#define C_TARGET 't' /* Set target file name */
#define C_RECVREG 'R' /* Receive a regular file */
#define C_RECVDIR 'D' /* Receive a directory */
#define C_RECVSYMLINK 'K' /* Receive a symbolic link */
#define C_RECVHARDLINK 'k' /* Receive a hard link */
#define C_END 'E' /* Indicate end of receive/send */
#define C_CLEAN 'C' /* Clean up */
#define C_QUERY 'Q' /* Query without checking */
#define C_SPECIAL 'S' /* Execute special command */
#define C_CMDSPECIAL 's' /* Execute cmd special command */
#define C_CHMOG 'M' /* Chown,Chgrp,Chmod a file */
#define ack() (void) sendcmd(C_ACK, NULL)
#define err() (void) sendcmd(C_ERRMSG, NULL)
/*
* Session startup commands.
*/
#define S_VERSION 'V' /* Version number */
#define S_REMOTEUSER 'R' /* Remote user name */
#define S_LOCALUSER 'L' /* Local user name */
#define S_END 'E' /* End of session startup commands */
/*
* These are the commands for "set config".
*/
#define SC_FREESPACE 's' /* Set min free space */
#define SC_FREEFILES 'f' /* Set min free files */
#define SC_HOSTNAME 'H' /* Set client hostname */
#define SC_LOGGING 'L' /* Set logging options */
#define SC_DEFOWNER 'o' /* Set default owner */
#define SC_DEFGROUP 'g' /* Set default group */
/*
* Query commands
*/
#define QC_ONNFS 'F' /* File exists & is on a NFS */
#define QC_ONRO 'O' /* File exists & is on a readonly fs */
#define QC_NO 'N' /* File does not exist */
#define QC_SYM 'l' /* File exists & is a symlink */
#define QC_YES 'Y' /* File does exist */
/*
* Clean commands
*/
#define CC_QUERY 'Q' /* Query if file should be rm'ed */
#define CC_END 'E' /* End of cleaning */
#define CC_YES 'Y' /* File doesn't exist - remove */
#define CC_NO 'N' /* File does exist - don't remove */
/*
* Run Command commands
*/
#define RC_FILE 'F' /* Name of a target file */
#define RC_COMMAND 'C' /* Command to run */
extern char *currenthost; /* Name of current host */
extern char *progname; /* Name of this program */
extern char *locuser; /* Local User's name */
extern int debug; /* Debugging flag */
extern int isserver; /* Acting as remote server */
extern int nerrs; /* Number of errors seen */
extern opt_t options; /* Global options */
extern int rem_r; /* Remote file descriptor, reading */
extern int rem_w; /* Remote file descriptor, writing */
extern int rtimeout; /* Response time out in seconds */
extern uid_t userid; /* User ID of rdist user */
extern gid_t groupid; /* Group ID of rdist user */
extern gid_t gidset[]; /* List of group IDs of rdist user */
extern int gidsetlen; /* Number of group IDs in list */
extern jmp_buf finish_jmpbuf; /* Setjmp buffer for finish() */
extern char defowner[64]; /* Default owner */
extern char defgroup[64]; /* Default group */
extern volatile sig_atomic_t contimedout; /* Connection timed out */
/*
* Declarations for files shared between rdist and rdistd
*/
/* common.c */
ssize_t xwrite(int, void *, size_t);
int init(int, char **, char **);
void finish(void);
void lostconn(void);
void coredump(void);
void sighandler(int);
int sendcmd(char, const char *, ...) __attribute__((__format__ (printf, 2, 3)));
int remline(u_char *, int, int);
ssize_t readrem(char *, ssize_t);
char *getusername(uid_t, char *, opt_t);
char *getgroupname(gid_t, char *, opt_t);
int response(void);
char *exptilde(char *, char *, size_t);
int becomeuser(void);
int becomeroot(void);
int setfiletime(char *, time_t, time_t);
char *getversion(void);
void runcommand(char *);
void *xmalloc(size_t);
void *xrealloc(void *, size_t);
void *xcalloc(size_t, size_t);
char *xstrdup(const char *);
char *xbasename(char *);
char *searchpath(char *);
/* message.c */
void msgprconfig(void);
char *msgparseopts(char *, int);
void checkhostname(void);
void message(int, const char *, ...) __attribute__((format (printf, 2, 3)));
void debugmsg(int, const char *, ...) __attribute__((format (printf, 2, 3)));
void error(const char *, ...) __attribute__((format (printf, 1, 2)));
void fatalerr(const char *, ...) __attribute__((format (printf, 1, 2)));
char *getnotifyfile(void);
/* client.c or server.c */
void cleanup(int);
#include <vis.h>
#define DECODE(a, b) strunvis(a, b)
#define ENCODE(a, b) strvis(a, b, VIS_WHITE)
#endif /* __DEFS_H__ */