/*********************************************************************\
* Copyright (c) 1991 by Wen-King Su (wen-king@vlsi.cs.caltech.edu) *
* Copyright (c) 1993 by Phil Richards (pgr@prg.ox.ac.uk) *
* *
* You may copy or modify this file in any manner you wish, provided *
* that this notice is always included, and that you hold the author *
* harmless for any loss or damage resulting from the installation or *
* use of this software. *
\*********************************************************************/
/* ---INFOBEGIN--- * DO NOT DELETE THIS COMMENT BLOCK!!!
COMMAND pro remote "change the permissions on a remote directory"
* ---INFOEND--- */
#include "client.h"
#include "table.h"
#include <stdlib.h>
static char *key;
static int
set_pro(char *name, char *acl)
{
char *path;
UBUF *ub;
path = util_abs_path(name);
ub = client_interact(CC_SET_PRO, strlen(acl), strlen(path), path + 1,
strlen(acl), acl);
(void)free(path);
if (client_intr_state > 1 || !ub || ub->cmd == CC_ERR)
return -1;
util_dirtypro(name);
return util_print_protection(name);
}
static int
do_pro(char *name)
{
if (key)
{
if (!validate_operation(name, DIR_OWNER | LITERAL_DIR))
return -1;
return set_pro(name, key);
}
else
{
/* nothing that can be validated */
return util_print_protection(name);
}
}
/* ARGSUSED */
int
rpro_main(int argc, char *const*argv, char **envp)
{
int retval;
char *here[2];
/* if the option is "-" then take the rest as a list of files */
/* pass *any* option onto the server */
if (argv[1]
&& (argv[1][0] == '+' || argv[1][0] == '-')
&& argv[1][1] != '\0')
{
argv++;
key = argv[0];
}
else
key = 0;
if (!argv[1])
{
here[0] = env_dir ? env_dir : ".";
here[1] = NULL;
argv = here;
}
else
argv++;
retval = -util_process_arglist(argv, do_pro);
client_done();
return retval;
}
syntax highlighted by Code2HTML, v. 0.9.1