Import ncpfs 2.0.1
This commit is contained in:
@@ -3,13 +3,16 @@
|
||||
#
|
||||
|
||||
USERUTILS = slist pqlist nwfsinfo pserver nprint nsend ncopy npasswd
|
||||
USERUTILS += nwbols nwbocreate nwborm nwboprops
|
||||
USERUTILS += nwbpcreate nwbprm nwbpvalues nwbpadd
|
||||
USERUTILS += nwgrant nwrevoke
|
||||
UIDUTILS = ncpmount ncpumount
|
||||
SBINUTILS = nwmsg
|
||||
|
||||
UTIL_EXECS = $(USERUTILS) $(UIDUTILS) $(SBINUTILS)
|
||||
UTILS = $(addprefix $(INTERM_BINDIR)/,$(UTIL_EXECS))
|
||||
|
||||
#CFLAGS = -Wall $(INCLUDES) $(KERNELD) -g -DNCPFS_VERSION=\"$(VERSION)\"
|
||||
#CFLAGS = -Wall $(INCLUDES) $(KERNELD) -g -DNCPFS_VERSION=\"$(VERSION)\"
|
||||
CFLAGS = -Wall $(INCLUDES) $(KERNELD) -O2 -DNCPFS_VERSION=\"$(VERSION)\"
|
||||
CC = gcc
|
||||
|
||||
|
||||
133
util/ncplib.c
133
util/ncplib.c
@@ -531,11 +531,13 @@ do_ncp_call(struct ncp_conn *conn, int request_size)
|
||||
int retries = 20;
|
||||
int len;
|
||||
long err;
|
||||
struct ncp_reply_header *r =
|
||||
(struct ncp_reply_header *)&(conn->packet);
|
||||
|
||||
while (retries > 0)
|
||||
{
|
||||
struct ncp_reply_header reply;
|
||||
struct sockaddr_ipx sender;
|
||||
int sizeofaddr = sizeof(sender);
|
||||
|
||||
retries -= 1;
|
||||
|
||||
result = sendto(conn->ncp_sock, conn->packet,
|
||||
@@ -549,30 +551,48 @@ do_ncp_call(struct ncp_conn *conn, int request_size)
|
||||
}
|
||||
|
||||
re_select:
|
||||
len = ipx_recv(conn->ncp_sock,
|
||||
conn->packet, NCP_PACKET_SIZE, 0, 3, &err);
|
||||
len = ipx_recvfrom(conn->ncp_sock,
|
||||
(char *)&reply, sizeof(reply),
|
||||
MSG_PEEK, &sender, &sizeofaddr, 3, &err);
|
||||
|
||||
if ( (len == sizeof(*r))
|
||||
&& (r->type == NCP_POSITIVE_ACK))
|
||||
if ((len < 0) && (err == ETIMEDOUT))
|
||||
{
|
||||
goto re_select;
|
||||
}
|
||||
if ( (len >= sizeof(*r))
|
||||
&& (r->type == NCP_REPLY)
|
||||
&& ( (request.type == NCP_ALLOC_SLOT_REQUEST)
|
||||
|| ( (r->sequence == request.sequence)
|
||||
&& (r->conn_low == request.conn_low)
|
||||
&& (r->conn_high == request.conn_high))))
|
||||
{
|
||||
conn->reply_size = len;
|
||||
break;
|
||||
continue;
|
||||
}
|
||||
if (len < 0)
|
||||
{
|
||||
return err;
|
||||
}
|
||||
|
||||
if ( /* Is the sender wrong? */
|
||||
(memcmp(&sender.sipx_node,
|
||||
&(conn->i.addr.sipx_node), 6) != 0)
|
||||
|| (sender.sipx_port != conn->i.addr.sipx_port)
|
||||
|
||||
/* Did the sender send a positive acknowledge? */
|
||||
|| ( (len == sizeof(reply))
|
||||
&& (reply.type == NCP_POSITIVE_ACK))
|
||||
|
||||
/* Did we get a bogus answer? */
|
||||
|| ( (len < sizeof(reply))
|
||||
|| (reply.type != NCP_REPLY)
|
||||
|| ( (request.type != NCP_ALLOC_SLOT_REQUEST)
|
||||
&& ( (reply.sequence != request.sequence)
|
||||
|| (reply.conn_low != request.conn_low)
|
||||
|| (reply.conn_high != request.conn_high)))))
|
||||
{
|
||||
/* Then throw away the packet */
|
||||
ipx_recv(conn->ncp_sock, (char *)&reply, sizeof(reply),
|
||||
0, 1, &err);
|
||||
goto re_select;
|
||||
}
|
||||
|
||||
ipx_recv(conn->ncp_sock, conn->packet, NCP_PACKET_SIZE,
|
||||
0, 1, &err);
|
||||
conn->reply_size = len;
|
||||
return 0;
|
||||
}
|
||||
return 0;
|
||||
return ETIMEDOUT;
|
||||
}
|
||||
|
||||
static int
|
||||
@@ -590,8 +610,9 @@ ncp_mount_request(struct ncp_conn *conn, int function)
|
||||
|
||||
if (conn->has_subfunction != 0)
|
||||
{
|
||||
*(__u16 *)&(h->data[0]) = conn->current_size
|
||||
- sizeof(struct ncp_request_header)- 2;
|
||||
*(__u16 *)&(h->data[0])
|
||||
= htons(conn->current_size
|
||||
- sizeof(struct ncp_request_header) - 2);
|
||||
}
|
||||
|
||||
request.function = function;
|
||||
@@ -628,8 +649,9 @@ ncp_temp_request(struct ncp_conn *conn, int function)
|
||||
|
||||
if (conn->has_subfunction != 0)
|
||||
{
|
||||
*(__u16 *)&(h->data[0]) = conn->current_size
|
||||
- sizeof(struct ncp_request_header) - 2;
|
||||
*(__u16 *)&(h->data[0])
|
||||
= htons(conn->current_size
|
||||
- sizeof(struct ncp_request_header) - 2);
|
||||
}
|
||||
|
||||
h->type = NCP_REQUEST;
|
||||
@@ -2593,7 +2615,42 @@ ncp_delete_directory(struct ncp_conn *conn,
|
||||
ncp_unlock_conn(conn);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
long
|
||||
ncp_add_trustee(struct ncp_conn *conn,
|
||||
int dir_handle, const char *path,
|
||||
__u32 object_id, __u8 rights)
|
||||
{
|
||||
long result;
|
||||
|
||||
ncp_init_request_s(conn, 13);
|
||||
ncp_add_byte(conn, dir_handle);
|
||||
ncp_add_dword(conn, htonl(object_id));
|
||||
ncp_add_byte(conn, rights);
|
||||
ncp_add_pstring(conn, path);
|
||||
|
||||
result = ncp_request(conn, 22);
|
||||
ncp_unlock_conn(conn);
|
||||
return result;
|
||||
}
|
||||
|
||||
long
|
||||
ncp_delete_trustee(struct ncp_conn *conn,
|
||||
int dir_handle, const char *path,__u32 object_id)
|
||||
{
|
||||
long result;
|
||||
|
||||
ncp_init_request_s(conn, 14);
|
||||
ncp_add_byte(conn, dir_handle);
|
||||
ncp_add_dword(conn, htonl(object_id));
|
||||
ncp_add_byte(conn, 0);
|
||||
ncp_add_pstring(conn, path);
|
||||
|
||||
result = ncp_request(conn, 22);
|
||||
ncp_unlock_conn(conn);
|
||||
return result;
|
||||
}
|
||||
|
||||
long
|
||||
ncp_rename_directory(struct ncp_conn *conn,
|
||||
int dir_handle,
|
||||
@@ -3239,3 +3296,33 @@ ncp_alloc_short_dir_handle(struct ncp_conn *conn,
|
||||
ncp_unlock_conn(conn);
|
||||
return result;
|
||||
}
|
||||
|
||||
long
|
||||
ncp_add_trustee_set(struct ncp_conn *conn,
|
||||
__u8 volume_number, __u32 dir_entry,
|
||||
__u16 rights_mask,
|
||||
int object_count, struct ncp_trustee_struct *rights)
|
||||
{
|
||||
long result = 0;
|
||||
|
||||
ncp_init_request(conn);
|
||||
ncp_add_byte(conn, 10); /* subfunction */
|
||||
ncp_add_byte(conn, 0); /* dos name space */
|
||||
ncp_add_byte(conn, 0); /* reserved */
|
||||
ncp_add_word(conn, 0x8006);
|
||||
ncp_add_word(conn, rights_mask);
|
||||
ncp_add_word(conn, object_count);
|
||||
ncp_add_handle_path(conn, volume_number, dir_entry, 1, NULL);
|
||||
|
||||
while (object_count > 0)
|
||||
{
|
||||
ncp_add_dword(conn, htonl(rights->object_id));
|
||||
ncp_add_word(conn, rights->rights);
|
||||
object_count -= 1;
|
||||
rights += 1;
|
||||
}
|
||||
|
||||
result = ncp_request(conn, 87);
|
||||
ncp_unlock_conn(conn);
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -347,6 +347,15 @@ ncp_rename_directory(struct ncp_conn *conn,
|
||||
int dir_handle,
|
||||
const char *old_path, const char *new_path);
|
||||
|
||||
long
|
||||
ncp_add_trustee(struct ncp_conn *conn,
|
||||
int dir_handle, const char *path,
|
||||
__u32 object_id, __u8 rights);
|
||||
|
||||
long
|
||||
ncp_delete_trustee(struct ncp_conn *conn,
|
||||
int dir_handle, const char *path, __u32 object_id);
|
||||
|
||||
long
|
||||
ncp_read(struct ncp_conn *conn, const char *file_id,
|
||||
off_t offset, size_t count, char *target);
|
||||
@@ -451,4 +460,22 @@ ncp_alloc_short_dir_handle(struct ncp_conn *conn,
|
||||
__u16 alloc_mode,
|
||||
__u8 *target);
|
||||
|
||||
long
|
||||
ncp_get_effective_dir_rights(struct ncp_conn *conn,
|
||||
struct nw_info_struct *file,
|
||||
__u16 *target);
|
||||
|
||||
struct ncp_trustee_struct
|
||||
{
|
||||
__u32 object_id;
|
||||
__u16 rights;
|
||||
};
|
||||
|
||||
long
|
||||
ncp_add_trustee_set(struct ncp_conn *conn,
|
||||
__u8 volume_number, __u32 dir_entry,
|
||||
__u16 rights_mask,
|
||||
int object_count, struct ncp_trustee_struct *rights);
|
||||
|
||||
|
||||
#endif /* _NCPLIB_H */
|
||||
|
||||
160
util/nwbocreate.c
Normal file
160
util/nwbocreate.c
Normal file
@@ -0,0 +1,160 @@
|
||||
/*
|
||||
* nwbocreate.c
|
||||
*
|
||||
* Create a bindery object on a NetWare server
|
||||
*
|
||||
* Copyright (C) 1996 by Volker Lendecke
|
||||
*
|
||||
*/
|
||||
|
||||
#include "ncplib.h"
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
static char *progname;
|
||||
|
||||
static void
|
||||
usage(void)
|
||||
{
|
||||
fprintf(stderr, "usage: %s [options]\n", progname);
|
||||
}
|
||||
|
||||
static void
|
||||
help(void)
|
||||
{
|
||||
printf("\n");
|
||||
printf("usage: %s [options]\n", progname);
|
||||
printf("\n"
|
||||
"-h Print this help text\n"
|
||||
"-S server Server name to be used\n"
|
||||
"-U username Username sent to server\n"
|
||||
"-P password Use this password\n"
|
||||
"-n Do not use any password\n"
|
||||
"-C Don't convert password to uppercase\n"
|
||||
"\n"
|
||||
"-o object_name Name of created object\n"
|
||||
"-t type Object type (decimal value)\n"
|
||||
"-r read-flag Read security\n"
|
||||
"-w write-flag Write security\n"
|
||||
"\n");
|
||||
}
|
||||
|
||||
static int
|
||||
parse_security(const char *security)
|
||||
{
|
||||
if (strcasecmp(security, "anyone") == 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
if (strcasecmp(security, "logged") == 0)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
if (strcasecmp(security, "object") == 0)
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
if (strcasecmp(security, "supervisor") == 0)
|
||||
{
|
||||
return 3;
|
||||
}
|
||||
if (strcasecmp(security, "netware") == 0)
|
||||
{
|
||||
return 4;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
struct ncp_conn *conn;
|
||||
char *object_name = NULL;
|
||||
int object_type = -1;
|
||||
long err;
|
||||
|
||||
int read_sec = 1; /* logged read */
|
||||
int write_sec = 3; /* supervisor write */
|
||||
int result = 1;
|
||||
|
||||
int opt;
|
||||
|
||||
progname = argv[0];
|
||||
|
||||
if ((conn = ncp_initialize(&argc, argv, 1, &err)) == NULL)
|
||||
{
|
||||
com_err(argv[0], err, "in ncp_initialize");
|
||||
goto finished;
|
||||
}
|
||||
|
||||
while ((opt = getopt(argc, argv, "ho:t:r:w:")) != EOF)
|
||||
{
|
||||
switch(opt) {
|
||||
case 'o':
|
||||
object_name = optarg;
|
||||
str_upper(object_name);
|
||||
break;
|
||||
case 't':
|
||||
object_type = atoi(optarg);
|
||||
break;
|
||||
case 'r':
|
||||
read_sec = parse_security(optarg);
|
||||
if (read_sec < 0)
|
||||
{
|
||||
fprintf(stderr,
|
||||
"%s: Wrong read security\n"
|
||||
"Must be one of anyone, logged, "
|
||||
"object, supervisor or netware\n",
|
||||
argv[0]);
|
||||
goto finished;
|
||||
}
|
||||
break;
|
||||
case 'w':
|
||||
write_sec = parse_security(optarg);
|
||||
if (write_sec < 0)
|
||||
{
|
||||
fprintf(stderr,
|
||||
"%s: Wrong write security\n"
|
||||
"Must be one of anyone, logged, "
|
||||
"object, supervisor or netware\n",
|
||||
argv[0]);
|
||||
goto finished;
|
||||
}
|
||||
break;
|
||||
case 'h':
|
||||
help();
|
||||
goto finished;
|
||||
default:
|
||||
usage();
|
||||
goto finished;
|
||||
}
|
||||
}
|
||||
|
||||
if (object_type < 0)
|
||||
{
|
||||
fprintf(stderr, "%s: You must specify an object type\n",
|
||||
argv[0]);
|
||||
goto finished;
|
||||
}
|
||||
|
||||
if (object_name == NULL)
|
||||
{
|
||||
fprintf(stderr, "%s: You must specify an object name\n",
|
||||
argv[0]);
|
||||
goto finished;
|
||||
}
|
||||
|
||||
if (ncp_create_bindery_object(conn, object_type, object_name,
|
||||
(write_sec << 4) + read_sec, 0) != 0)
|
||||
{
|
||||
fprintf(stderr, "%s: Could not create the object\n", argv[0]);
|
||||
}
|
||||
else
|
||||
{
|
||||
result = 0;
|
||||
}
|
||||
|
||||
finished:
|
||||
ncp_close(conn);
|
||||
return result;
|
||||
}
|
||||
124
util/nwbols.c
Normal file
124
util/nwbols.c
Normal file
@@ -0,0 +1,124 @@
|
||||
/*
|
||||
* nwlsobj.c
|
||||
*
|
||||
* List bindery objects
|
||||
*
|
||||
* Copyright (C) 1996 by Volker Lendecke
|
||||
*
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <ctype.h>
|
||||
#include <stdlib.h>
|
||||
#include "ncplib.h"
|
||||
|
||||
static char *progname;
|
||||
|
||||
static void
|
||||
usage(void)
|
||||
{
|
||||
fprintf(stderr, "usage: %s [options] pattern\n", progname);
|
||||
return;
|
||||
}
|
||||
|
||||
static void
|
||||
help(void)
|
||||
{
|
||||
printf("\n");
|
||||
printf("usage: %s [options]\n", progname);
|
||||
printf("\n"
|
||||
"-h Print this help text\n"
|
||||
"-S server Server name to be used\n"
|
||||
"-U username Username sent to server\n"
|
||||
"-P password Use this password\n"
|
||||
"-n Do not use any password\n"
|
||||
"-C Don't convert password to uppercase\n"
|
||||
"\n"
|
||||
"-t type Object type to be listed (decimal)\n"
|
||||
"-v Verbose listing\n"
|
||||
"\n");
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
struct ncp_conn *conn;
|
||||
struct ncp_bindery_object o;
|
||||
int found = 0;
|
||||
|
||||
char default_pattern[] = "*";
|
||||
char *pattern = default_pattern;
|
||||
char *p;
|
||||
long err;
|
||||
int opt;
|
||||
int verbose = 0;
|
||||
__u16 type = 0xffff;
|
||||
|
||||
progname = argv[0];
|
||||
|
||||
if ((conn = ncp_initialize(&argc, argv, 1, &err)) == NULL)
|
||||
{
|
||||
com_err(argv[0], err, "in ncp_initialize");
|
||||
return 1;
|
||||
}
|
||||
|
||||
while ((opt = getopt(argc, argv, "hvt:")) != EOF)
|
||||
{
|
||||
switch(opt) {
|
||||
case 'h':
|
||||
help();
|
||||
exit(1);
|
||||
case 't':
|
||||
type = atoi(optarg);
|
||||
break;
|
||||
case 'v':
|
||||
verbose = 1;
|
||||
break;
|
||||
default:
|
||||
usage();
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
if (optind < argc-1)
|
||||
{
|
||||
usage();
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (optind == argc-1)
|
||||
{
|
||||
pattern = argv[optind];
|
||||
}
|
||||
|
||||
for (p = pattern; *p != '\0'; p++)
|
||||
{
|
||||
*p = toupper(*p);
|
||||
}
|
||||
|
||||
o.object_id = 0xffffffff;
|
||||
|
||||
while (ncp_scan_bindery_object(conn, o.object_id,
|
||||
type, pattern, &o) == 0)
|
||||
{
|
||||
found = 1;
|
||||
if (verbose != 0)
|
||||
{
|
||||
printf("%s %08X %04X %d %02X %d\n",
|
||||
o.object_name, (unsigned int)o.object_id,
|
||||
(unsigned int)o.object_type,
|
||||
o.object_flags, o.object_security,
|
||||
o.object_has_prop);
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("%s %08X %04X\n",
|
||||
o.object_name, (unsigned int)o.object_id,
|
||||
(unsigned int)o.object_type);
|
||||
}
|
||||
}
|
||||
|
||||
ncp_close(conn);
|
||||
return 0;
|
||||
}
|
||||
120
util/nwboprops.c
Normal file
120
util/nwboprops.c
Normal file
@@ -0,0 +1,120 @@
|
||||
/*
|
||||
* nwboprops.c
|
||||
*
|
||||
* List properties of a bindery object
|
||||
*
|
||||
* Copyright (C) 1996 by Volker Lendecke
|
||||
*
|
||||
*/
|
||||
|
||||
#include "ncplib.h"
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
static char *progname;
|
||||
|
||||
static void
|
||||
usage(void)
|
||||
{
|
||||
fprintf(stderr, "usage: %s [options]\n", progname);
|
||||
}
|
||||
|
||||
static void
|
||||
help(void)
|
||||
{
|
||||
printf("\n");
|
||||
printf("usage: %s [options]\n", progname);
|
||||
printf("\n"
|
||||
"-h Print this help text\n"
|
||||
"-S server Server name to be used\n"
|
||||
"-U username Username sent to server\n"
|
||||
"-P password Use this password\n"
|
||||
"-n Do not use any password\n"
|
||||
"-C Don't convert password to uppercase\n"
|
||||
"\n"
|
||||
"-o object_name Name of object inspected\n"
|
||||
"-t type Object type (decimal value)\n"
|
||||
"-v Verbose listing\n"
|
||||
"\n");
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
struct ncp_conn *conn;
|
||||
char *object_name = NULL;
|
||||
int object_type = -1;
|
||||
long err;
|
||||
|
||||
struct ncp_property_info info;
|
||||
|
||||
int result = 1;
|
||||
int verbose = 0;
|
||||
int opt;
|
||||
|
||||
progname = argv[0];
|
||||
|
||||
if ((conn = ncp_initialize(&argc, argv, 1, &err)) == NULL)
|
||||
{
|
||||
com_err(argv[0], err, "in ncp_initialize");
|
||||
goto finished;
|
||||
}
|
||||
|
||||
while ((opt = getopt(argc, argv, "ho:t:v")) != EOF)
|
||||
{
|
||||
switch(opt) {
|
||||
case 'o':
|
||||
object_name = optarg;
|
||||
str_upper(object_name);
|
||||
break;
|
||||
case 't':
|
||||
object_type = atoi(optarg);
|
||||
break;
|
||||
case 'v':
|
||||
verbose = 1;
|
||||
break;
|
||||
case 'h':
|
||||
help();
|
||||
goto finished;
|
||||
default:
|
||||
usage();
|
||||
goto finished;
|
||||
}
|
||||
}
|
||||
|
||||
if (object_type < 0)
|
||||
{
|
||||
fprintf(stderr, "%s: You must specify an object type\n",
|
||||
argv[0]);
|
||||
goto finished;
|
||||
}
|
||||
|
||||
if (object_name == NULL)
|
||||
{
|
||||
fprintf(stderr, "%s: You must specify an object name\n",
|
||||
argv[0]);
|
||||
goto finished;
|
||||
}
|
||||
|
||||
info.search_instance = 0xffffffff;
|
||||
|
||||
while (ncp_scan_property(conn, object_type, object_name,
|
||||
info.search_instance, "*", &info) == 0)
|
||||
{
|
||||
if (verbose != 0)
|
||||
{
|
||||
printf("%s %d %02x %d\n",
|
||||
info.property_name, info.property_flags,
|
||||
info.property_security,
|
||||
info.value_available_flag);
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("%s\n", info.property_name);
|
||||
}
|
||||
}
|
||||
|
||||
finished:
|
||||
ncp_close(conn);
|
||||
return result;
|
||||
}
|
||||
105
util/nwborm.c
Normal file
105
util/nwborm.c
Normal file
@@ -0,0 +1,105 @@
|
||||
/*
|
||||
* nwborm.c
|
||||
*
|
||||
* Destroy a bindery object on a NetWare server
|
||||
*
|
||||
* Copyright (C) 1996 by Volker Lendecke
|
||||
*
|
||||
*/
|
||||
|
||||
#include "ncplib.h"
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
static char *progname;
|
||||
|
||||
static void
|
||||
usage(void)
|
||||
{
|
||||
fprintf(stderr, "usage: %s [options]\n", progname);
|
||||
}
|
||||
|
||||
static void
|
||||
help(void)
|
||||
{
|
||||
printf("\n");
|
||||
printf("usage: %s [options]\n", progname);
|
||||
printf("\n"
|
||||
"-h Print this help text\n"
|
||||
"-S server Server name to be used\n"
|
||||
"-U username Username sent to server\n"
|
||||
"-P password Use this password\n"
|
||||
"-n Do not use any password\n"
|
||||
"-C Don't convert password to uppercase\n"
|
||||
"\n"
|
||||
"-o object_name Name of object to be removed\n"
|
||||
"-t type Object type (decimal value)\n"
|
||||
"\n");
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
struct ncp_conn *conn;
|
||||
char *object_name = NULL;
|
||||
int object_type = -1;
|
||||
long err;
|
||||
|
||||
int result = 1;
|
||||
|
||||
int opt;
|
||||
|
||||
progname = argv[0];
|
||||
|
||||
if ((conn = ncp_initialize(&argc, argv, 1, &err)) == NULL)
|
||||
{
|
||||
com_err(argv[0], err, "in ncp_initialize");
|
||||
goto finished;
|
||||
}
|
||||
|
||||
while ((opt = getopt(argc, argv, "ho:t:")) != EOF)
|
||||
{
|
||||
switch(opt) {
|
||||
case 'o':
|
||||
object_name = optarg;
|
||||
str_upper(object_name);
|
||||
break;
|
||||
case 't':
|
||||
object_type = atoi(optarg);
|
||||
break;
|
||||
case 'h':
|
||||
help();
|
||||
goto finished;
|
||||
default:
|
||||
usage();
|
||||
goto finished;
|
||||
}
|
||||
}
|
||||
|
||||
if (object_type < 0)
|
||||
{
|
||||
fprintf(stderr, "%s: You must specify an object type\n",
|
||||
argv[0]);
|
||||
goto finished;
|
||||
}
|
||||
|
||||
if (object_name == NULL)
|
||||
{
|
||||
fprintf(stderr, "%s: You must specify an object name\n",
|
||||
argv[0]);
|
||||
goto finished;
|
||||
}
|
||||
|
||||
if (ncp_delete_bindery_object(conn, object_type, object_name) != 0)
|
||||
{
|
||||
fprintf(stderr, "%s: Could not delete the object\n", argv[0]);
|
||||
}
|
||||
else
|
||||
{
|
||||
result = 0;
|
||||
}
|
||||
|
||||
finished:
|
||||
ncp_close(conn);
|
||||
return result;
|
||||
}
|
||||
246
util/nwbpadd.c
Normal file
246
util/nwbpadd.c
Normal file
@@ -0,0 +1,246 @@
|
||||
/*
|
||||
* nwbpadd.c
|
||||
*
|
||||
* Set the contents of a SET property of a bindery object on a NetWare server
|
||||
*
|
||||
* Copyright (C) 1996 by Volker Lendecke
|
||||
*
|
||||
*/
|
||||
|
||||
#include "ncplib.h"
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
static char *progname;
|
||||
|
||||
static void
|
||||
usage(void)
|
||||
{
|
||||
fprintf(stderr, "usage: %s [options]\n", progname);
|
||||
}
|
||||
|
||||
static void
|
||||
help(void)
|
||||
{
|
||||
printf("\n");
|
||||
printf("usage: %s [options] [values]\n", progname);
|
||||
printf("\n"
|
||||
"-h Print this help text\n"
|
||||
"-S server Server name to be used\n"
|
||||
"-U username Username sent to server\n"
|
||||
"-P password Use this password\n"
|
||||
"-n Do not use any password\n"
|
||||
"-C Don't convert password to uppercase\n"
|
||||
"\n"
|
||||
"-o object_name Name of accessed object\n"
|
||||
"-t type Object type (decimal value)\n"
|
||||
"-p property Name of property to be touched\n"
|
||||
"value value to be added\n"
|
||||
"\n"
|
||||
"If property is of type SET, value is an object id (hex)\n"
|
||||
"Otherwise, value is either a string value to be written, or\n"
|
||||
"a count of bytes to be written. The latter is assumed if\n"
|
||||
"more than one value argument is given. The count is decimal,\n"
|
||||
"and the following arguments are interpreted as bytes in\n"
|
||||
"hexadecimal notation.\n"
|
||||
"\n");
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
struct ncp_conn *conn;
|
||||
char *object_name = NULL;
|
||||
int object_type = -1;
|
||||
char *property_name = NULL;
|
||||
char *value = NULL;
|
||||
struct ncp_property_info info;
|
||||
long err;
|
||||
int result = 1;
|
||||
int opt;
|
||||
|
||||
progname = argv[0];
|
||||
|
||||
if ((conn = ncp_initialize(&argc, argv, 1, &err)) == NULL)
|
||||
{
|
||||
com_err(argv[0], err, "in ncp_initialize");
|
||||
goto finished;
|
||||
}
|
||||
|
||||
while ((opt = getopt(argc, argv, "ho:t:p:v:")) != EOF)
|
||||
{
|
||||
switch(opt) {
|
||||
case 'o':
|
||||
object_name = optarg;
|
||||
str_upper(object_name);
|
||||
break;
|
||||
case 't':
|
||||
object_type = atoi(optarg);
|
||||
break;
|
||||
case 'p':
|
||||
property_name = optarg;
|
||||
if (strlen(property_name) > 15)
|
||||
{
|
||||
fprintf(stderr, "%s: Property Name too long\n",
|
||||
argv[0]);
|
||||
exit(1);
|
||||
}
|
||||
str_upper(property_name);
|
||||
break;
|
||||
case 'v':
|
||||
value = optarg;
|
||||
break;
|
||||
case 'h':
|
||||
help();
|
||||
goto finished;
|
||||
default:
|
||||
usage();
|
||||
goto finished;
|
||||
}
|
||||
}
|
||||
|
||||
if (object_type < 0)
|
||||
{
|
||||
fprintf(stderr, "%s: You must specify an object type\n",
|
||||
argv[0]);
|
||||
goto finished;
|
||||
}
|
||||
|
||||
if (object_name == NULL)
|
||||
{
|
||||
fprintf(stderr, "%s: You must specify an object name\n",
|
||||
argv[0]);
|
||||
goto finished;
|
||||
}
|
||||
|
||||
if (property_name == NULL)
|
||||
{
|
||||
fprintf(stderr, "%s: You must specify a property name\n",
|
||||
argv[0]);
|
||||
goto finished;
|
||||
}
|
||||
|
||||
if (optind > argc-1)
|
||||
{
|
||||
fprintf(stderr, "%s: You must specify a property value\n",
|
||||
argv[0]);
|
||||
goto finished;
|
||||
}
|
||||
|
||||
value = argv[optind];
|
||||
optind += 1;
|
||||
|
||||
if (ncp_scan_property(conn, object_type, object_name,
|
||||
0xffffffff, property_name, &info) != 0)
|
||||
{
|
||||
fprintf(stderr, "%s: Could not find property\n", argv[0]);
|
||||
goto finished;
|
||||
}
|
||||
|
||||
if ((info.property_flags & 2) != 0)
|
||||
{
|
||||
/* Property is of type SET */
|
||||
struct ncp_bindery_object o;
|
||||
|
||||
if (optind != argc)
|
||||
{
|
||||
fprintf(stderr, "%s: For the SET property %s, you must"
|
||||
" specify an object id as value\n",
|
||||
progname, property_name);
|
||||
goto finished;
|
||||
}
|
||||
|
||||
if (ncp_get_bindery_object_name(conn,
|
||||
ntohl(strtol(value, NULL, 16)),
|
||||
&o) != 0)
|
||||
{
|
||||
fprintf(stderr, "%s: %s is not a valid object id\n",
|
||||
progname, value);
|
||||
goto finished;
|
||||
}
|
||||
|
||||
if (ncp_add_object_to_set(conn, object_type, object_name,
|
||||
property_name,
|
||||
o.object_type, o.object_name) != 0)
|
||||
{
|
||||
fprintf(stderr, "%s: could not add object %s\n",
|
||||
progname, o.object_name);
|
||||
goto finished;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Property is of type ITEM */
|
||||
char contents[255*128];
|
||||
int segno = 1;
|
||||
int length;
|
||||
|
||||
memset(contents, 0, sizeof(contents));
|
||||
|
||||
if (optind == argc)
|
||||
{
|
||||
/* value is the string to add */
|
||||
length = strlen(value);
|
||||
if (length >= sizeof(contents))
|
||||
{
|
||||
fprintf(stderr, "%s: Value too long\n",
|
||||
progname);
|
||||
goto finished;
|
||||
}
|
||||
strcpy(contents, value);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* value is the byte count */
|
||||
int i;
|
||||
length = atoi(value);
|
||||
if (length >= sizeof(contents))
|
||||
{
|
||||
fprintf(stderr, "%s: Value too long\n",
|
||||
progname);
|
||||
goto finished;
|
||||
}
|
||||
if (optind != argc - length)
|
||||
{
|
||||
fprintf(stderr, "%s: Byte count does not match"
|
||||
" number of bytes\n", progname);
|
||||
goto finished;
|
||||
}
|
||||
i = 0;
|
||||
while (optind < argc)
|
||||
{
|
||||
contents[i] = strtol(argv[optind], NULL, 16);
|
||||
i += 1;
|
||||
optind += 1;
|
||||
}
|
||||
}
|
||||
|
||||
for (segno = 1; segno <= 255; segno++)
|
||||
{
|
||||
struct nw_property segment;
|
||||
int offset = (segno-1)*128;
|
||||
|
||||
if ( offset > length )
|
||||
{
|
||||
/* everything written */
|
||||
break;
|
||||
}
|
||||
memcpy(segment.value, &(contents[offset]), 128);
|
||||
segment.more_flag = segno*128 < length;
|
||||
if (ncp_write_property_value(conn, object_type,
|
||||
object_name,
|
||||
property_name,
|
||||
segno, &segment) != 0)
|
||||
{
|
||||
fprintf(stderr, "%s: Could not write "
|
||||
"property\n", progname);
|
||||
goto finished;
|
||||
}
|
||||
}
|
||||
}
|
||||
result = 0;
|
||||
|
||||
finished:
|
||||
ncp_close(conn);
|
||||
return result;
|
||||
}
|
||||
186
util/nwbpcreate.c
Normal file
186
util/nwbpcreate.c
Normal file
@@ -0,0 +1,186 @@
|
||||
/*
|
||||
* nwbpcreate.c
|
||||
*
|
||||
* Create a property for a bindery object on a NetWare server
|
||||
*
|
||||
* Copyright (C) 1996 by Volker Lendecke
|
||||
*
|
||||
*/
|
||||
|
||||
#include "ncplib.h"
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
static char *progname;
|
||||
|
||||
static void
|
||||
usage(void)
|
||||
{
|
||||
fprintf(stderr, "usage: %s [options]\n", progname);
|
||||
}
|
||||
|
||||
static void
|
||||
help(void)
|
||||
{
|
||||
printf("\n");
|
||||
printf("usage: %s [options]\n", progname);
|
||||
printf("\n"
|
||||
"-h Print this help text\n"
|
||||
"-S server Server name to be used\n"
|
||||
"-U username Username sent to server\n"
|
||||
"-P password Use this password\n"
|
||||
"-n Do not use any password\n"
|
||||
"-C Don't convert password to uppercase\n"
|
||||
"\n"
|
||||
"-o object_name Name of object\n"
|
||||
"-t type Object type (decimal value)\n"
|
||||
"-p property Name of property to be created\n"
|
||||
"-s Property is SET, default: ITEM\n"
|
||||
"-r read-flag Read security\n"
|
||||
"-w write-flag Write security\n"
|
||||
"\n");
|
||||
}
|
||||
|
||||
static int
|
||||
parse_security(const char *security)
|
||||
{
|
||||
if (strcasecmp(security, "anyone") == 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
if (strcasecmp(security, "logged") == 0)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
if (strcasecmp(security, "object") == 0)
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
if (strcasecmp(security, "supervisor") == 0)
|
||||
{
|
||||
return 3;
|
||||
}
|
||||
if (strcasecmp(security, "netware") == 0)
|
||||
{
|
||||
return 4;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
struct ncp_conn *conn;
|
||||
char *object_name = NULL;
|
||||
int object_type = -1;
|
||||
char *property_name = NULL;
|
||||
int property_is_set = 0;
|
||||
long err;
|
||||
|
||||
int read_sec = 1; /* logged read */
|
||||
int write_sec = 3; /* supervisor write */
|
||||
int result = 1;
|
||||
|
||||
int opt;
|
||||
|
||||
progname = argv[0];
|
||||
|
||||
if ((conn = ncp_initialize(&argc, argv, 1, &err)) == NULL)
|
||||
{
|
||||
com_err(argv[0], err, "in ncp_initialize");
|
||||
goto finished;
|
||||
}
|
||||
|
||||
while ((opt = getopt(argc, argv, "ho:t:p:sr:w:")) != EOF)
|
||||
{
|
||||
switch(opt) {
|
||||
case 'o':
|
||||
object_name = optarg;
|
||||
str_upper(object_name);
|
||||
break;
|
||||
case 't':
|
||||
object_type = atoi(optarg);
|
||||
break;
|
||||
case 'p':
|
||||
property_name = optarg;
|
||||
if (strlen(property_name) > 15)
|
||||
{
|
||||
fprintf(stderr, "%s: Property Name too long\n",
|
||||
argv[0]);
|
||||
exit(1);
|
||||
}
|
||||
str_upper(property_name);
|
||||
break;
|
||||
case 's':
|
||||
property_is_set = 1;
|
||||
break;
|
||||
case 'r':
|
||||
read_sec = parse_security(optarg);
|
||||
if (read_sec < 0)
|
||||
{
|
||||
fprintf(stderr,
|
||||
"%s: Wrong read security\n"
|
||||
"Must be one of anyone, logged, "
|
||||
"object, supervisor or netware\n",
|
||||
argv[0]);
|
||||
goto finished;
|
||||
}
|
||||
break;
|
||||
case 'w':
|
||||
write_sec = parse_security(optarg);
|
||||
if (write_sec < 0)
|
||||
{
|
||||
fprintf(stderr,
|
||||
"%s: Wrong write security\n"
|
||||
"Must be one of anyone, logged, "
|
||||
"object, supervisor or netware\n",
|
||||
argv[0]);
|
||||
goto finished;
|
||||
}
|
||||
break;
|
||||
case 'h':
|
||||
help();
|
||||
goto finished;
|
||||
default:
|
||||
usage();
|
||||
goto finished;
|
||||
}
|
||||
}
|
||||
|
||||
if (object_type < 0)
|
||||
{
|
||||
fprintf(stderr, "%s: You must specify an object type\n",
|
||||
argv[0]);
|
||||
goto finished;
|
||||
}
|
||||
|
||||
if (object_name == NULL)
|
||||
{
|
||||
fprintf(stderr, "%s: You must specify an object name\n",
|
||||
argv[0]);
|
||||
goto finished;
|
||||
}
|
||||
|
||||
if (property_name == NULL)
|
||||
{
|
||||
fprintf(stderr, "%s: You must specify a property name\n",
|
||||
argv[0]);
|
||||
goto finished;
|
||||
}
|
||||
|
||||
if (ncp_create_property(conn, object_type, object_name,
|
||||
property_name,
|
||||
property_is_set ? 2 : 0,
|
||||
(write_sec << 4) + read_sec) != 0)
|
||||
{
|
||||
fprintf(stderr, "%s: Could not create the property\n",argv[0]);
|
||||
}
|
||||
else
|
||||
{
|
||||
result = 0;
|
||||
}
|
||||
|
||||
finished:
|
||||
ncp_close(conn);
|
||||
return result;
|
||||
}
|
||||
125
util/nwbprm.c
Normal file
125
util/nwbprm.c
Normal file
@@ -0,0 +1,125 @@
|
||||
/*
|
||||
* nwbprm.c
|
||||
*
|
||||
* Delete a property of a bindery object on a NetWare server
|
||||
*
|
||||
* Copyright (C) 1996 by Volker Lendecke
|
||||
*
|
||||
*/
|
||||
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
#include "ncplib.h"
|
||||
|
||||
static char *progname;
|
||||
|
||||
static void
|
||||
usage(void)
|
||||
{
|
||||
fprintf(stderr, "usage: %s [options] [pattern]\n", progname);
|
||||
}
|
||||
|
||||
static void
|
||||
help(void)
|
||||
{
|
||||
printf("\n");
|
||||
printf("usage: %s [options]\n", progname);
|
||||
printf("\n"
|
||||
"-h Print this help text\n"
|
||||
"-S server Server name to be used\n"
|
||||
"-U username Username sent to server\n"
|
||||
"-P password Use this password\n"
|
||||
"-n Do not use any password\n"
|
||||
"-C Don't convert password to uppercase\n"
|
||||
"\n"
|
||||
"-o object_name Name of object\n"
|
||||
"-t type Object type (decimal value)\n"
|
||||
"-p property Name of property to be deleted\n"
|
||||
"\n");
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
struct ncp_conn *conn;
|
||||
char *object_name = NULL;
|
||||
int object_type = -1;
|
||||
char *property_name = NULL;
|
||||
long err;
|
||||
|
||||
int result = 1;
|
||||
|
||||
int opt;
|
||||
|
||||
progname = argv[0];
|
||||
|
||||
if ((conn = ncp_initialize(&argc, argv, 1, &err)) == NULL)
|
||||
{
|
||||
com_err(argv[0], err, "in ncp_initialize");
|
||||
goto finished;
|
||||
}
|
||||
|
||||
while ((opt = getopt(argc, argv, "ho:t:p:")) != EOF)
|
||||
{
|
||||
switch(opt) {
|
||||
case 'o':
|
||||
object_name = optarg;
|
||||
str_upper(object_name);
|
||||
break;
|
||||
case 't':
|
||||
object_type = atoi(optarg);
|
||||
break;
|
||||
case 'p':
|
||||
property_name = optarg;
|
||||
if (strlen(property_name) > 15)
|
||||
{
|
||||
fprintf(stderr, "%s: Property Name too long\n",
|
||||
argv[0]);
|
||||
exit(1);
|
||||
}
|
||||
str_upper(property_name);
|
||||
break;
|
||||
case 'h':
|
||||
help();
|
||||
goto finished;
|
||||
default:
|
||||
usage();
|
||||
goto finished;
|
||||
}
|
||||
}
|
||||
|
||||
if (object_type < 0)
|
||||
{
|
||||
fprintf(stderr, "%s: You must specify an object type\n",
|
||||
argv[0]);
|
||||
goto finished;
|
||||
}
|
||||
|
||||
if (object_name == NULL)
|
||||
{
|
||||
fprintf(stderr, "%s: You must specify an object name\n",
|
||||
argv[0]);
|
||||
goto finished;
|
||||
}
|
||||
|
||||
if (property_name == NULL)
|
||||
{
|
||||
fprintf(stderr, "%s: You must specify a property name\n",
|
||||
argv[0]);
|
||||
goto finished;
|
||||
}
|
||||
|
||||
if (ncp_delete_property(conn, object_type, object_name,
|
||||
property_name) != 0)
|
||||
{
|
||||
fprintf(stderr, "%s: Could not delete the property\n",argv[0]);
|
||||
}
|
||||
else
|
||||
{
|
||||
result = 0;
|
||||
}
|
||||
|
||||
finished:
|
||||
ncp_close(conn);
|
||||
return result;
|
||||
}
|
||||
178
util/nwbpvalues.c
Normal file
178
util/nwbpvalues.c
Normal file
@@ -0,0 +1,178 @@
|
||||
/*
|
||||
* nwbpvalues.c
|
||||
*
|
||||
* List the contents of a SET property of a bindery object on a NetWare server
|
||||
*
|
||||
* Copyright (C) 1996 by Volker Lendecke
|
||||
*
|
||||
*/
|
||||
|
||||
#include "ncplib.h"
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
static char *progname;
|
||||
|
||||
static void
|
||||
usage(void)
|
||||
{
|
||||
fprintf(stderr, "usage: %s [options]\n", progname);
|
||||
}
|
||||
|
||||
static void
|
||||
help(void)
|
||||
{
|
||||
printf("\n");
|
||||
printf("usage: %s [options]\n", progname);
|
||||
printf("\n"
|
||||
"-h Print this help text\n"
|
||||
"-S server Server name to be used\n"
|
||||
"-U username Username sent to server\n"
|
||||
"-P password Use this password\n"
|
||||
"-n Do not use any password\n"
|
||||
"-C Don't convert password to uppercase\n"
|
||||
"\n"
|
||||
"-o object_name Name of object\n"
|
||||
"-t type Object type (decimal value)\n"
|
||||
"-p property Name of property to be listed\n"
|
||||
"-v Verbose object listing\n"
|
||||
"\n");
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
struct ncp_conn *conn;
|
||||
char *object_name = NULL;
|
||||
int object_type = -1;
|
||||
char *property_name = NULL;
|
||||
int segno;
|
||||
int verbose = 0;
|
||||
struct nw_property segment;
|
||||
struct ncp_property_info info;
|
||||
long err;
|
||||
|
||||
int result = 1;
|
||||
|
||||
int opt;
|
||||
|
||||
progname = argv[0];
|
||||
|
||||
if ((conn = ncp_initialize(&argc, argv, 1, &err)) == NULL)
|
||||
{
|
||||
com_err(argv[0], err, "in ncp_initialize");
|
||||
goto finished;
|
||||
}
|
||||
|
||||
while ((opt = getopt(argc, argv, "ho:t:p:v")) != EOF)
|
||||
{
|
||||
switch(opt) {
|
||||
case 'o':
|
||||
object_name = optarg;
|
||||
str_upper(object_name);
|
||||
break;
|
||||
case 't':
|
||||
object_type = atoi(optarg);
|
||||
break;
|
||||
case 'p':
|
||||
property_name = optarg;
|
||||
if (strlen(property_name) > 15)
|
||||
{
|
||||
fprintf(stderr, "%s: Property Name too long\n",
|
||||
argv[0]);
|
||||
exit(1);
|
||||
}
|
||||
str_upper(property_name);
|
||||
break;
|
||||
case 'v':
|
||||
verbose = 1;
|
||||
break;
|
||||
case 'h':
|
||||
help();
|
||||
goto finished;
|
||||
default:
|
||||
usage();
|
||||
goto finished;
|
||||
}
|
||||
}
|
||||
|
||||
if (object_type < 0)
|
||||
{
|
||||
fprintf(stderr, "%s: You must specify an object type\n",
|
||||
argv[0]);
|
||||
goto finished;
|
||||
}
|
||||
|
||||
if (object_name == NULL)
|
||||
{
|
||||
fprintf(stderr, "%s: You must specify an object name\n",
|
||||
argv[0]);
|
||||
goto finished;
|
||||
}
|
||||
|
||||
if (property_name == NULL)
|
||||
{
|
||||
fprintf(stderr, "%s: You must specify a property name\n",
|
||||
argv[0]);
|
||||
goto finished;
|
||||
}
|
||||
|
||||
if (ncp_scan_property(conn, object_type, object_name,
|
||||
0xffffffff, property_name, &info) != 0)
|
||||
{
|
||||
fprintf(stderr, "%s: Could not find property\n", argv[0]);
|
||||
goto finished;
|
||||
}
|
||||
|
||||
if ((info.property_flags & 2) == 0)
|
||||
{
|
||||
fprintf(stderr, "%s: Property %s is not of type SET\n",
|
||||
argv[0], property_name);
|
||||
goto finished;
|
||||
}
|
||||
|
||||
segno = 1;
|
||||
while (ncp_read_property_value(conn, object_type, object_name,
|
||||
segno, property_name, &segment) == 0)
|
||||
{
|
||||
__u32 *value = (__u32 *)(segment.value);
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 32; i++)
|
||||
{
|
||||
struct ncp_bindery_object o;
|
||||
|
||||
if ((*value == 0) || (*value == 0xffffffff))
|
||||
{
|
||||
break;
|
||||
}
|
||||
if (ncp_get_bindery_object_name(conn, ntohl(*value),
|
||||
&o) == 0)
|
||||
{
|
||||
if (verbose != 0)
|
||||
{
|
||||
printf("%s %08X %04X\n",
|
||||
o.object_name,
|
||||
(unsigned int)o.object_id,
|
||||
(unsigned int)o.object_type);
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("%s\n", o.object_name);
|
||||
}
|
||||
}
|
||||
value += 1;
|
||||
}
|
||||
|
||||
if (segment.more_flag == 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
segno += 1;
|
||||
}
|
||||
result = 0;
|
||||
|
||||
finished:
|
||||
ncp_close(conn);
|
||||
return result;
|
||||
}
|
||||
133
util/nwgrant.c
Normal file
133
util/nwgrant.c
Normal file
@@ -0,0 +1,133 @@
|
||||
/*
|
||||
* nwgrant.c
|
||||
*
|
||||
* Add trustee rights to file or directory
|
||||
*
|
||||
* Copyright (C) 1996 by Volker Lendecke
|
||||
*
|
||||
*/
|
||||
|
||||
#include "ncplib.h"
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
static char *progname;
|
||||
|
||||
static void
|
||||
usage(void)
|
||||
{
|
||||
fprintf(stderr, "usage: %s [options]\n", progname);
|
||||
}
|
||||
|
||||
static void
|
||||
help(void)
|
||||
{
|
||||
printf("\n");
|
||||
printf("usage: %s [options] file/directory\n", progname);
|
||||
printf("\n"
|
||||
"-h Print this help text\n"
|
||||
"-S server Server name to be used\n"
|
||||
"-U username Username sent to server\n"
|
||||
"-P password Use this password\n"
|
||||
"-n Do not use any password\n"
|
||||
"-C Don't convert password to uppercase\n"
|
||||
"\n"
|
||||
"-o object_name Name of object added as trustee\n"
|
||||
"-t type Object type (decimal value)\n"
|
||||
"-r rights Rights mask (see manual page)\n"
|
||||
"\n"
|
||||
"directory\n"
|
||||
"\n");
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
struct ncp_conn *conn;
|
||||
char *object_name = NULL;
|
||||
int object_type = -1;
|
||||
struct ncp_bindery_object o;
|
||||
int rights = -1;
|
||||
char *path = NULL;
|
||||
long err;
|
||||
int result = 1;
|
||||
int opt;
|
||||
|
||||
progname = argv[0];
|
||||
|
||||
if ((conn = ncp_initialize(&argc, argv, 1, &err)) == NULL)
|
||||
{
|
||||
com_err(argv[0], err, "in ncp_initialize");
|
||||
goto finished;
|
||||
}
|
||||
|
||||
while ((opt = getopt(argc, argv, "ho:t:r:")) != EOF)
|
||||
{
|
||||
switch(opt) {
|
||||
case 'o':
|
||||
object_name = optarg;
|
||||
str_upper(object_name);
|
||||
break;
|
||||
case 't':
|
||||
object_type = atoi(optarg);
|
||||
break;
|
||||
case 'r':
|
||||
rights = strtol(optarg, NULL, 16);
|
||||
break;
|
||||
case 'h':
|
||||
help();
|
||||
goto finished;
|
||||
default:
|
||||
usage();
|
||||
goto finished;
|
||||
}
|
||||
}
|
||||
|
||||
if (object_type < 0)
|
||||
{
|
||||
fprintf(stderr, "%s: You must specify an object type\n",
|
||||
argv[0]);
|
||||
goto finished;
|
||||
}
|
||||
|
||||
if (object_name == NULL)
|
||||
{
|
||||
fprintf(stderr, "%s: You must specify an object name\n",
|
||||
argv[0]);
|
||||
goto finished;
|
||||
}
|
||||
|
||||
if (rights < 0)
|
||||
{
|
||||
fprintf(stderr, "%s: You must specify a rights mask\n",
|
||||
progname);
|
||||
goto finished;
|
||||
}
|
||||
|
||||
if (optind != argc-1)
|
||||
{
|
||||
fprintf(stderr, "%s: You must specify a directory\n",
|
||||
progname);
|
||||
goto finished;
|
||||
}
|
||||
path = argv[optind];
|
||||
|
||||
if (ncp_get_bindery_object_id(conn, object_type, object_name, &o) != 0)
|
||||
{
|
||||
fprintf(stderr, "%s: Could not find object %s\n",
|
||||
progname, object_name);
|
||||
goto finished;
|
||||
}
|
||||
|
||||
if (ncp_add_trustee(conn, 0, path, o.object_id, rights) != 0)
|
||||
{
|
||||
fprintf(stderr, "%s: Could not add trustee rights\n",progname);
|
||||
goto finished;
|
||||
}
|
||||
|
||||
result = 0;
|
||||
|
||||
finished:
|
||||
ncp_close(conn);
|
||||
return result;
|
||||
}
|
||||
@@ -1,62 +0,0 @@
|
||||
/*
|
||||
* nwlsobj.c
|
||||
*
|
||||
* List bindery objects
|
||||
*
|
||||
* Copyright (C) 1996 by Volker Lendecke
|
||||
*
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <ctype.h>
|
||||
#include "ncplib.h"
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
struct ncp_conn *conn;
|
||||
struct ncp_bindery_object o;
|
||||
int found = 0;
|
||||
|
||||
char default_pattern[] = "*";
|
||||
char *pattern = default_pattern;
|
||||
char *p;
|
||||
long err;
|
||||
|
||||
if ((conn = ncp_initialize(&argc, argv, 1, &err)) == NULL)
|
||||
{
|
||||
com_err(argv[0], err, "in ncp_initialize");
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (argc > 2)
|
||||
{
|
||||
fprintf(stderr, "usage: %s [options]\n", argv[0]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (argc == 2)
|
||||
{
|
||||
pattern = argv[1];
|
||||
}
|
||||
|
||||
for (p = pattern; *p != '\0'; p++)
|
||||
{
|
||||
*p = toupper(*p);
|
||||
}
|
||||
|
||||
o.object_id = 0xffffffff;
|
||||
|
||||
while (ncp_scan_bindery_object(conn, o.object_id,
|
||||
0xffff, pattern, &o) == 0)
|
||||
{
|
||||
found = 1;
|
||||
printf("%s %08X %04X\n",
|
||||
o.object_name, (unsigned int)o.object_id,
|
||||
(unsigned int)o.object_type);
|
||||
}
|
||||
|
||||
ncp_close(conn);
|
||||
return 0;
|
||||
}
|
||||
122
util/nwrevoke.c
Normal file
122
util/nwrevoke.c
Normal file
@@ -0,0 +1,122 @@
|
||||
/*
|
||||
* nwrevoke.c
|
||||
*
|
||||
* Remove trustee rights from file or directory
|
||||
*
|
||||
* Copyright (C) 1996 by Volker Lendecke
|
||||
*
|
||||
*/
|
||||
|
||||
#include "ncplib.h"
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
static char *progname;
|
||||
|
||||
static void
|
||||
usage(void)
|
||||
{
|
||||
fprintf(stderr, "usage: %s [options]\n", progname);
|
||||
}
|
||||
|
||||
static void
|
||||
help(void)
|
||||
{
|
||||
printf("\n");
|
||||
printf("usage: %s [options] file/directory\n", progname);
|
||||
printf("\n"
|
||||
"-h Print this help text\n"
|
||||
"-S server Server name to be used\n"
|
||||
"-U username Username sent to server\n"
|
||||
"-P password Use this password\n"
|
||||
"-n Do not use any password\n"
|
||||
"-C Don't convert password to uppercase\n"
|
||||
"\n"
|
||||
"-o object_name Name of object removed as trustee\n"
|
||||
"-t type Object type (decimal value)\n"
|
||||
"\n"
|
||||
"file/directory\n"
|
||||
"\n");
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
struct ncp_conn *conn;
|
||||
char *object_name = NULL;
|
||||
int object_type = -1;
|
||||
struct ncp_bindery_object o;
|
||||
char *path = NULL;
|
||||
long err;
|
||||
int result = 1;
|
||||
int opt;
|
||||
|
||||
progname = argv[0];
|
||||
|
||||
if ((conn = ncp_initialize(&argc, argv, 1, &err)) == NULL)
|
||||
{
|
||||
com_err(argv[0], err, "in ncp_initialize");
|
||||
goto finished;
|
||||
}
|
||||
|
||||
while ((opt = getopt(argc, argv, "ho:t:")) != EOF)
|
||||
{
|
||||
switch(opt) {
|
||||
case 'o':
|
||||
object_name = optarg;
|
||||
str_upper(object_name);
|
||||
break;
|
||||
case 't':
|
||||
object_type = atoi(optarg);
|
||||
break;
|
||||
case 'h':
|
||||
help();
|
||||
goto finished;
|
||||
default:
|
||||
usage();
|
||||
goto finished;
|
||||
}
|
||||
}
|
||||
|
||||
if (object_type < 0)
|
||||
{
|
||||
fprintf(stderr, "%s: You must specify an object type\n",
|
||||
argv[0]);
|
||||
goto finished;
|
||||
}
|
||||
|
||||
if (object_name == NULL)
|
||||
{
|
||||
fprintf(stderr, "%s: You must specify an object name\n",
|
||||
argv[0]);
|
||||
goto finished;
|
||||
}
|
||||
|
||||
if (optind != argc-1)
|
||||
{
|
||||
fprintf(stderr, "%s: You must specify a directory\n",
|
||||
progname);
|
||||
goto finished;
|
||||
}
|
||||
path = argv[optind];
|
||||
|
||||
if (ncp_get_bindery_object_id(conn, object_type, object_name, &o) != 0)
|
||||
{
|
||||
fprintf(stderr, "%s: Could not find object %s\n",
|
||||
progname, object_name);
|
||||
goto finished;
|
||||
}
|
||||
|
||||
if (ncp_delete_trustee(conn, 0, path, o.object_id) != 0)
|
||||
{
|
||||
fprintf(stderr, "%s: Could not remove trustee rights\n",
|
||||
progname);
|
||||
goto finished;
|
||||
}
|
||||
|
||||
result = 0;
|
||||
|
||||
finished:
|
||||
ncp_close(conn);
|
||||
return result;
|
||||
}
|
||||
Reference in New Issue
Block a user