home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 11 Util
/
11-Util.zip
/
LMUTIL.ZIP
/
RIGHTS.C
< prev
next >
Wrap
C/C++ Source or Header
|
1991-03-19
|
4KB
|
223 lines
/*
** Program: RIGHTS
**
** Author: Roger L Soles
**
** Description:
**
** This example C program uses the NetAccessGetUserPerms to obtain
** information to determine rights in a directory.
**
** Instructions:
**
** RIGHTS [-?qgrwcxdapf] [PATH_NAME]
**
** ? help
**
** q quite - errorlevel information only
**
** g group membership establishes rights
**
** r read
**
** w write
**
** c create
**
** x execute
**
** d delete
**
** a attributes
**
** p permissions
**
** f full (r-p)
**
*/
#define LINT_ARGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <direct.h>
#define INCL_NETACCESS
#define INCL_NETWKSTA
#define INCL_NETERRORS
#include <lan.h>
#include "getsrv.h"
void main (int argc, char * argv[])
{
char far * cptr;
int qmode = 0;
unsigned short dPerms = 0x00;
API_RET_TYPE uRetCode = 0;
char far * pszServer;
char far * pszPathName;
char far * pszUserName;
unsigned short pusPerms;
argv++; argc--;
cptr = argv[0];
if ( *cptr++ == '-' )
{
strupr (cptr);
while (*cptr != 0)
{
switch (*cptr)
{
/*
** Enumerated permissions
*/
case 'G':
dPerms |= ACCESS_GROUP;
break;
case 'R':
dPerms |= ACCESS_READ;
break;
case 'W':
dPerms |= ACCESS_WRITE;
break;
case 'C':
dPerms |= ACCESS_CREATE;
break;
case 'X':
dPerms |= ACCESS_EXEC;
break;
case 'D':
dPerms |= ACCESS_DELETE;
break;
case 'A':
dPerms |= ACCESS_ATRIB;
break;
case 'P':
dPerms |= ACCESS_PERM;
break;
case 'F':
dPerms |= 0x7f;
break;
case 'Q':
/*
** quite mode inhibits messages -- rather uses only
** the error level
*/
qmode = 1;
break;
case '?':
default:
printf ("\nUSAGE: RIGHTS [-?qgrwcxdapf] [PATH_NAME]\n");
exit (1);
}
cptr++;
}
argv++; argc--;
}
/*
** Path Name
*/
if (argc != 1)
{
getcwd(pszPathName, 128);
}
else
{
strupr (argv[0]);
pszPathName = argv[0];
}
/*
** Get Logon Server & User Name
*/
if ( get_logon_server (&pszServer, &pszUserName) != 0 )
{
printf ("Error Obtaining Logon Server/User Name\n");
exit (1);
}
/*
** Get the rights
*/
uRetCode = NetAccessGetUserPerms ( pszServer,
pszUserName,
pszPathName,
&pusPerms);
if (uRetCode != NERR_Success)
{
if (qmode == 0)
{
printf ("%Fs has insufficient rights in %Fs\n", pszUserName, pszPathName);
exit (1);
}
else
{
/*
** No Rights!
*/
pusPerms = 0x00;
}
}
#define BITTEST(x, y) ( (x & y) == y)
if (qmode == 0)
{
printf ("%Fs rights in %Fs = ", pszUserName, pszPathName);
if ( BITTEST(pusPerms, ACCESS_GROUP) )
{
printf ("G:");
}
if ( BITTEST(pusPerms, ACCESS_READ) )
{
printf ("R");
}
if ( BITTEST(pusPerms, ACCESS_WRITE) )
{
printf ("W");
}
if ( BITTEST(pusPerms, ACCESS_CREATE) )
{
printf ("C");
}
if ( BITTEST(pusPerms, ACCESS_EXEC) )
{
printf ("X");
}
if ( BITTEST(pusPerms, ACCESS_DELETE) )
{
printf ("D");
}
if ( BITTEST(pusPerms, ACCESS_ATRIB) )
{
printf ("A");
}
if ( BITTEST(pusPerms, ACCESS_PERM) )
{
printf ("P");
}
printf ("\n");
exit (0);
}
else
{
if ( BITTEST(pusPerms, dPerms) )
{
exit (0);
}
exit (1);
}
}