summaryrefslogtreecommitdiffstats
path: root/source/utils
diff options
context:
space:
mode:
Diffstat (limited to 'source/utils')
-rw-r--r--source/utils/make_smbcodepage.c472
-rw-r--r--source/utils/nmblookup.c241
-rw-r--r--source/utils/smbpasswd.c581
-rw-r--r--source/utils/status.c526
-rw-r--r--source/utils/testparm.c112
-rw-r--r--source/utils/testprns.c72
6 files changed, 0 insertions, 2004 deletions
diff --git a/source/utils/make_smbcodepage.c b/source/utils/make_smbcodepage.c
deleted file mode 100644
index b4cb1523349..00000000000
--- a/source/utils/make_smbcodepage.c
+++ /dev/null
@@ -1,472 +0,0 @@
-/*
- Unix SMB/Netbios implementation.
- Version 1.9.
- Create codepage files from codepage_def.XXX files.
-
- Copyright (C) Jeremy Allison 1997
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-#include "includes.h"
-
-static char *prog_name = NULL;
-
-/*
- * Print program usage and die.
- */
-
-void codepage_usage(char *progname)
-{
- fprintf(stderr, "Usage is : %s [c|d] <codepage> <inputfile> <outputfile>\n",
- progname);
- exit(1);
-}
-
-/*
- * Read a line from a buffer into a line buffer. Ensure null
- * terminated.
- */
-
-void read_line( char **buf, char *line_buf, int size)
-{
- char *p = *buf;
- int num = 0;
-
- for(; *p && (*p != '\n'); p++)
- {
- if(num < (size - 1))
- line_buf[num++] = *p;
- }
- if(*p)
- p++; /* Go past the '\n' */
- line_buf[num] = '\0';
- *buf = p;
-}
-
-/*
- * Strip comment lines and blank lines from the data.
- * Copies into a new buffer and frees the old.
- * Returns the number of lines copied.
- */
-
-int clean_data( char **buf, uint32 *size)
-{
- char linebuf[512];
- char *p = *buf;
- int num_lines = 0;
- char *newbuf = (char *)malloc( *size + 1);
- char *newbuf_p = NULL;
-
- if(newbuf == NULL)
- {
- fprintf(stderr, "%s: malloc fail for size %d.\n", prog_name, *size + 1);
- exit(1);
- }
-
- newbuf_p = newbuf;
- *newbuf_p = '\0';
-
- while( *p )
- {
- char *cp;
-
- read_line( &p, linebuf, sizeof(linebuf));
- /* Null terminate after comment. */
- if((cp = strchr( linebuf, '#'))!= NULL)
- *cp = '\0';
-
- for(cp = linebuf;*cp && isspace(*cp); cp++)
- ;
-
- if(*cp == '\0')
- continue;
-
- strcpy(newbuf_p, cp);
- num_lines++;
- newbuf_p += (strlen(newbuf_p) + 1);
- }
-
- free(*buf);
- *buf = newbuf;
- return num_lines;
-}
-
-/*
- * Parse a byte from a codepage file.
- */
-
-BOOL parse_byte(char *buf, unsigned char *bp)
-{
- unsigned int b;
- char *endptr = NULL;
-
- b = (unsigned int)strtol(buf, &endptr, 0);
- if(endptr == buf || b > 255)
- return False;
-
- *bp = (unsigned char)b;
- return True;
-}
-
-/*
- * Parse a bool from a codepage file.
- */
-
-BOOL parse_bool(char *buf, unsigned char *bp)
-{
- if(isdigit(*buf))
- {
- char *endptr = NULL;
-
- *bp = (unsigned char)strtol(buf, &endptr, 0);
- if(endptr == buf )
- return False;
- if(*bp != 0)
- *bp = 1;
- } else {
- if(strcasecmp(buf, "True") && strcasecmp(buf, "False"))
- return False;
- if(strcasecmp(buf, "True")==0)
- *bp = 1;
- else
- *bp = 0;
- }
- return True;
-}
-
-/*
- * Print a parse error and exit.
- */
-
-void parse_error(char *buf, char *msg)
-{
- fprintf(stderr, "%s: %s whilst parsing line \n%s\n", prog_name,
- msg, buf);
- exit(1);
-}
-
-/*
- * Create a compiled codepage file from a codepage definition file.
- */
-
-int do_compile(int codepage, char *input_file, char *output_file)
-{
- FILE *fp = NULL;
- uint32 size = 0;
- char *buf = NULL;
- char output_buf[CODEPAGE_HEADER_SIZE + 512];
- int num_lines = 0;
- int i = 0;
- struct stat st;
-
- /* Get the size of the input file. Read the entire thing into memory. */
- if(stat((char *)input_file, &st)!= 0)
- {
- fprintf(stderr, "%s: failed to get the file size for file %s. Error was %s\n",
- prog_name, input_file, strerror(errno));
- exit(1);
- }
-
- size = (uint32)st.st_size;
-
- /* I don't believe these things should be bigger than 100k :-) */
- if(size > 100*1024)
- {
- fprintf(stderr, "%s: filesize %d is too large for a codepage definition file. \
-The maximum size I will believe is 100k.\n", prog_name, size);
- exit(1);
- }
-
- if((fp = fopen(input_file, "r")) == NULL)
- {
- fprintf(stderr, "%s: cannot open file %s for input.\n", prog_name, input_file);
- exit(1);
- }
-
- /* As we will be reading text, allocate one more byte for a '\0' */
- if((buf = (char *)malloc( size + 1 )) == NULL)
- {
- fprintf(stderr, "%s: malloc fail for size %d.\n", prog_name, size + 1);
- fclose(fp);
- exit(1);
- }
-
- if(fread( buf, 1, size, fp) != size)
- {
- fprintf(stderr, "%s: read failed for file %s. Error was %s.\n", prog_name,
- input_file, strerror(errno));
- free((char *)buf);
- fclose(fp);
- exit(1);
- }
-
- /* Null terminate the text read. */
- buf[size] = '\0';
-
- /* Go through the data line by line, strip out comments (anything
- after a '#' to end-of-line) and blank lines. The rest should be
- the codepage data.
- */
-
- num_lines = clean_data( &buf, &size);
-
- /* There can be a maximum of 128 lines. */
- if(num_lines > 128)
- {
- fprintf(stderr, "%s: There can be a maximum 128 lines of data in a codepage \
-definition file. File %s has %d.\n", prog_name, input_file, num_lines);
- exit(1);
- }
-
- /* Setup the output file header. */
- SSVAL(output_buf,CODEPAGE_VERSION_OFFSET,CODEPAGE_FILE_VERSION_ID);
- SSVAL(output_buf,CODEPAGE_CLIENT_CODEPAGE_OFFSET,(uint16)codepage);
- SIVAL(output_buf,CODEPAGE_LENGTH_OFFSET,(num_lines * 4));
-
- /* Now convert the lines into the compiled form. */
- for(i = 0; i < num_lines; i++)
- {
- char token_buf[512];
- char *p = buf;
- unsigned char b = 0;
-
- /* Get the 'lower' value. */
- if(!next_token(&p, token_buf, NULL))
- parse_error(buf, "cannot parse first value");
- if(!parse_byte( token_buf, &b))
- parse_error(buf, "first value doesn't resolve to a byte");
-
- /* Add this to the output buffer. */
- SCVAL(output_buf,CODEPAGE_HEADER_SIZE+(i*4),b);
-
- /* Get the 'upper' value. */
- if(!next_token(&p, token_buf, NULL))
- parse_error(buf, "cannot parse second value");
- if(!parse_byte( token_buf, &b))
- parse_error(buf, "second value doesn't resolve to a byte");
-
- /* Add this to the output buffer. */
- SCVAL(output_buf,CODEPAGE_HEADER_SIZE+(i*4) + 1,b);
-
- /* Get the 'upper to lower' value. */
- if(!next_token(&p, token_buf, NULL))
- parse_error(buf, "cannot parse third value");
- if(!parse_bool( token_buf, &b))
- parse_error(buf, "third value doesn't resolve to a boolean");
-
- /* Add this to the output buffer. */
- SCVAL(output_buf,CODEPAGE_HEADER_SIZE+(i*4) + 2,b);
-
- /* Get the 'lower to upper' value. */
- if(!next_token(&p, token_buf, NULL))
- parse_error(buf, "cannot parse fourth value");
- if(!parse_bool( token_buf, &b))
- parse_error(buf, "fourth value doesn't resolve to a boolean");
-
- /* Add this to the output buffer. */
- SCVAL(output_buf,CODEPAGE_HEADER_SIZE+(i*4) + 3,b);
-
- buf += (strlen(buf) + 1);
- }
-
- /* Now write out the output_buf. */
- if((fp = fopen(output_file, "w"))==NULL)
- {
- fprintf(stderr, "%s: Cannot open output file %s. Error was %s.\n",
- prog_name, output_file, strerror(errno));
- exit(1);
- }
-
- if(fwrite(output_buf, 1, CODEPAGE_HEADER_SIZE + (num_lines*4), fp) !=
- CODEPAGE_HEADER_SIZE + (num_lines*4))
- {
- fprintf(stderr, "%s: Cannot write output file %s. Error was %s.\n",
- prog_name, output_file, strerror(errno));
- exit(1);
- }
-
- fclose(fp);
-
- return 0;
-}
-
-/*
- * Placeholder for now.
- */
-
-int do_decompile( int codepage, char *input_file, char *output_file)
-{
- uint32 size = 0;
- struct stat st;
- char header_buf[CODEPAGE_HEADER_SIZE];
- char *buf = NULL;
- FILE *fp = NULL;
- int num_lines = 0;
- int i = 0;
-
- /* Get the size of the input file. Read the entire thing into memory. */
- if(stat((char *)input_file, &st)!= 0)
- {
- fprintf(stderr, "%s: failed to get the file size for file %s. Error was %s\n",
- prog_name, input_file, strerror(errno));
- exit(1);
- }
-
- size = (uint32)st.st_size;
-
- if( size < CODEPAGE_HEADER_SIZE || size > (CODEPAGE_HEADER_SIZE + 256))
- {
- fprintf(stderr, "%s: file %s is an incorrect size for a \
-code page file.\n", prog_name, input_file);
- exit(1);
- }
-
- /* Read the first 8 bytes of the codepage file - check
- the version number and code page number. All the data
- is held in little endian format.
- */
-
- if((fp = fopen( input_file, "r")) == NULL)
- {
- fprintf(stderr, "%s: cannot open file %s. Error was %s\n",
- prog_name, input_file, strerror(errno));
- exit(1);
- }
-
- if(fread( header_buf, 1, CODEPAGE_HEADER_SIZE, fp)!=CODEPAGE_HEADER_SIZE)
- {
- fprintf(stderr, "%s: cannot read header from file %s. Error was %s\n",
- prog_name, input_file, strerror(errno));
- exit(1);
- }
-
- /* Check the version value */
- if(SVAL(header_buf,CODEPAGE_VERSION_OFFSET) != CODEPAGE_FILE_VERSION_ID)
- {
- fprintf(stderr, "%s: filename %s has incorrect version id. \
-Needed %hu, got %hu.\n",
- prog_name, input_file, (uint16)CODEPAGE_FILE_VERSION_ID,
- SVAL(header_buf,CODEPAGE_VERSION_OFFSET));
- exit(1);
- }
-
- /* Check the codepage matches */
- if(SVAL(header_buf,CODEPAGE_CLIENT_CODEPAGE_OFFSET) != (uint16)codepage)
- {
- fprintf(stderr, "%s: filename %s has incorrect codepage. \
-Needed %hu, got %hu.\n",
- prog_name, input_file, (uint16)codepage,
- SVAL(header_buf,CODEPAGE_CLIENT_CODEPAGE_OFFSET));
- exit(1);
- }
-
- /* Check the length is correct. */
- if(IVAL(header_buf,CODEPAGE_LENGTH_OFFSET) !=
- (unsigned int)(size - CODEPAGE_HEADER_SIZE))
- {
- fprintf(stderr, "%s: filename %s has incorrect size headers. \
-Needed %u, got %u.\n", prog_name, input_file, size - CODEPAGE_HEADER_SIZE,
- IVAL(header_buf,CODEPAGE_LENGTH_OFFSET));
- exit(1);
- }
-
- size -= CODEPAGE_HEADER_SIZE; /* Remove header */
-
- /* Make sure the size is a multiple of 4. */
- if((size % 4 ) != 0)
- {
- fprintf(stderr, "%s: filename %s has a codepage size not a \
-multiple of 4.\n", prog_name, input_file);
- exit(1);
- }
-
- /* Allocate space for the code page file and read it all in. */
- if((buf = (char *)malloc( size )) == NULL)
- {
- fprintf (stderr, "%s: malloc fail for size %d.\n",
- prog_name, size );
- exit(1);
- }
-
- if(fread( buf, 1, size, fp)!=size)
- {
- fprintf(stderr, "%s: read fail on file %s. Error was %s.\n",
- prog_name, input_file, strerror(errno));
- exit(1);
- }
-
- fclose(fp);
-
- /* Now dump the codepage into an ascii file. */
- if((fp = fopen(output_file, "w")) == NULL)
- {
- fprintf(stderr, "%s: cannot open file %s. Error was %s\n",
- prog_name, output_file, strerror(errno));
- exit(1);
- }
-
- fprintf(fp, "#\n# Codepage definition file for IBM Code Page %d.\n#\n",
- codepage);
- fprintf(fp, "# This file was automatically generated.\n#\n");
- fprintf(fp, "# defines lower->upper mapping.\n");
- fprintf(fp, "#\n#The columns are :\n# lower\tupper\tu-t-l\tl-t-u\n#\n");
-
- num_lines = size / 4;
- for( i = 0; i < num_lines; i++)
- {
- fprintf(fp, "0x%02X\t0x%02X\t%s\t%s\n", CVAL(buf, (i*4)), CVAL(buf, (i*4)+1),
- CVAL(buf, (i*4)+2) ? "True" : "False",
- CVAL(buf, (i*4)+3) ? "True" : "False");
- }
- fclose(fp);
- return 0;
-}
-
-int main(int argc, char **argv)
-{
- int codepage = 0;
- char *input_file = NULL;
- char *output_file = NULL;
- BOOL compile = False;
-
- prog_name = argv[0];
-
- if(argc != 5)
- codepage_usage(prog_name);
-
- if(argv[1][0] != 'c' && argv[1][0] != 'C' && argv[1][0] != 'd' &&
- argv[1][0] != 'D')
- codepage_usage(prog_name);
-
- input_file = argv[3];
- output_file = argv[4];
-
- /* Are we compiling or decompiling. */
- if(argv[1][0] == 'c' || argv[1][0] == 'C')
- compile = True;
-
- /* Convert the second argument into a client codepage value. */
- if((codepage = atoi(argv[2])) == 0)
- {
- fprintf(stderr, "%s: %s is not a valid codepage.\n", prog_name, argv[2]);
- exit(1);
- }
-
- if(compile)
- return do_compile( codepage, input_file, output_file);
- else
- return do_decompile( codepage, input_file, output_file);
-}
diff --git a/source/utils/nmblookup.c b/source/utils/nmblookup.c
deleted file mode 100644
index 63ca156449f..00000000000
--- a/source/utils/nmblookup.c
+++ /dev/null
@@ -1,241 +0,0 @@
-/*
- Unix SMB/Netbios implementation.
- Version 1.9.
- NBT client - used to lookup netbios names
- Copyright (C) Andrew Tridgell 1994-1997
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-*/
-
-#ifdef SYSLOG
-#undef SYSLOG
-#endif
-
-#include "includes.h"
-
-extern int DEBUGLEVEL;
-
-extern pstring scope;
-
-extern pstring myhostname;
-extern struct in_addr ipzero;
-
-int ServerFD= -1;
-
-int RootPort = 0;
-
-/****************************************************************************
- open the socket communication
- **************************************************************************/
-static BOOL open_sockets(void)
-{
- struct hostent *hp;
-
- /* get host info */
- if ((hp = Get_Hostbyname(myhostname)) == 0)
- {
- DEBUG(0,( "Get_Hostbyname: Unknown host. %s\n",myhostname));
- return False;
- }
-
- ServerFD = open_socket_in( SOCK_DGRAM,
- (RootPort ? 137 :0),
- 3,
- interpret_addr(lp_socket_address()) );
-
- if (ServerFD == -1)
- return(False);
-
- set_socket_options(ServerFD,"SO_BROADCAST");
-
- DEBUG(3, ("Socket opened.\n"));
- return True;
-}
-
-
-/****************************************************************************
- initialise connect, service and file structs
-****************************************************************************/
-static BOOL init_structs(void )
-{
- if (!get_myname(myhostname,NULL))
- return(False);
-
- return True;
-}
-
-/****************************************************************************
-usage on the program
-****************************************************************************/
-static void usage(void)
-{
- printf("Usage: nmblookup [-M] [-B bcast address] [-d debuglevel] name\n");
- printf("Version %s\n",VERSION);
- printf("\t-d debuglevel set the debuglevel\n");
- printf("\t-B broadcast address the address to use for broadcasts\n");
- printf("\t-M searches for a master browser\n");
- printf("\t-S lookup node status as well\n");
- printf("\t-r Use root port 137 (Win95 only replies to this)\n");
- printf("\t-A Do a node status on <name> as an IP Address\n");
- printf("\n");
-}
-
-
-/****************************************************************************
- main program
-****************************************************************************/
-int main(int argc,char *argv[])
-{
- int opt;
- unsigned int lookup_type = 0x0;
- pstring lookup;
- extern int optind;
- extern char *optarg;
- BOOL find_master=False;
- BOOL find_status=False;
- int i;
- static pstring servicesf = CONFIGFILE;
- struct in_addr bcast_addr;
- BOOL got_bcast = False;
- BOOL lookup_by_ip = False;
-
- DEBUGLEVEL = 1;
- *lookup = 0;
-
- TimeInit();
-
- setup_logging(argv[0],True);
-
- charset_initialise();
-
- while ((opt = getopt(argc, argv, "d:B:i:s:SMrhA")) != EOF)
- switch (opt)
- {
- case 'B':
- iface_set_default(NULL,optarg,NULL);
- bcast_addr = *interpret_addr2(optarg);
- got_bcast = True;
- break;
- case 'i':
- fstrcpy(scope,optarg);
- strupper(scope);
- break;
- case 'M':
- find_master = True;
- break;
- case 'S':
- find_status = True;
- break;
- case 'd':
- DEBUGLEVEL = atoi(optarg);
- break;
- case 's':
- pstrcpy(servicesf, optarg);
- break;
- case 'r':
- RootPort = -1;
- break;
- case 'h':
- usage();
- exit(0);
- break;
- case 'A':
- lookup_by_ip = True;
- break;
- default:
- usage();
- exit(1);
- }
-
- if (argc < 2) {
- usage();
- exit(1);
- }
-
- if (!lp_load(servicesf,True)) {
- fprintf(stderr, "Can't load %s - run testparm to debug it\n", servicesf);
- }
-
- load_interfaces();
- init_structs();
- if (!open_sockets()) return(1);
-
- if (!got_bcast)
- bcast_addr = *iface_bcast(ipzero);
-
- DEBUG(1,("Sending queries to %s\n",inet_ntoa(bcast_addr)));
-
-
- for (i=optind;i<argc;i++)
- {
- BOOL bcast = True;
- int retries = 2;
- char *p;
- struct in_addr ip;
-
- fstrcpy(lookup,argv[i]);
-
- if(lookup_by_ip)
- {
- strcpy(lookup,"*");
- ip = *interpret_addr2(argv[i]);
- printf("Looking up status of %s\n",inet_ntoa(ip));
- name_status(ServerFD,lookup,lookup_type,True,ip,NULL,NULL,NULL);
- printf("\n");
- continue;
- }
-
- if (find_master) {
- if (*lookup == '-') {
- strcpy(lookup,"\01\02__MSBROWSE__\02");
- lookup_type = 1;
- } else {
- lookup_type = 0x1d;
- }
- }
-
- p = strchr(lookup,'#');
-
- if (p) {
- *p = 0;
- sscanf(p+1,"%x",&lookup_type);
- bcast = False;
- retries = 1;
- }
-
- if (name_query(ServerFD,lookup,lookup_type,bcast,True,
- bcast_addr,&ip,NULL))
- {
- printf("%s %s\n",inet_ntoa(ip),lookup);
-
- /* We can only do find_status if the ip address returned
- was valid - ie. name_query returned true.
- */
- if (find_status)
- {
- printf("Looking up status of %s\n",inet_ntoa(ip));
- name_status(ServerFD,lookup,lookup_type,True,ip,NULL,NULL,NULL);
- printf("\n");
- }
- }
- else
- {
- printf("name_query failed to find name %s\n", lookup);
- }
- }
-
- return(0);
-}
diff --git a/source/utils/smbpasswd.c b/source/utils/smbpasswd.c
deleted file mode 100644
index d20ff42c0e8..00000000000
--- a/source/utils/smbpasswd.c
+++ /dev/null
@@ -1,581 +0,0 @@
-/*
- * Unix SMB/Netbios implementation. Version 1.9. smbpasswd module. Copyright
- * (C) Jeremy Allison 1995-1997.
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option)
- * any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc., 675
- * Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include "includes.h"
-
-/* Static buffers we will return. */
-static struct smb_passwd pw_buf;
-static pstring user_name;
-static unsigned char smbpwd[16];
-static unsigned char smbntpwd[16];
-
-static int gethexpwd(char *p, char *pwd)
-{
- int i;
- unsigned char lonybble, hinybble;
- char *hexchars = "0123456789ABCDEF";
- char *p1, *p2;
- for (i = 0; i < 32; i += 2) {
- hinybble = toupper(p[i]);
- lonybble = toupper(p[i + 1]);
-
- p1 = strchr(hexchars, hinybble);
- p2 = strchr(hexchars, lonybble);
- if (!p1 || !p2)
- return (False);
-
- hinybble = PTR_DIFF(p1, hexchars);
- lonybble = PTR_DIFF(p2, hexchars);
-
- pwd[i / 2] = (hinybble << 4) | lonybble;
- }
- return (True);
-}
-
-struct smb_passwd *
-_my_get_smbpwnam(FILE * fp, char *name, BOOL * valid_old_pwd,
- BOOL *got_valid_nt_entry, long *pwd_seekpos)
-{
- char linebuf[256];
- unsigned char c;
- unsigned char *p;
- long uidval;
- long linebuf_len;
-
- /*
- * Scan the file, a line at a time and check if the name matches.
- */
- while (!feof(fp)) {
- linebuf[0] = '\0';
- *pwd_seekpos = ftell(fp);
-
- fgets(linebuf, 256, fp);
- if (ferror(fp))
- return NULL;
-
- /*
- * Check if the string is terminated with a newline - if not
- * then we must keep reading and discard until we get one.
- */
- linebuf_len = strlen(linebuf);
- if (linebuf[linebuf_len - 1] != '\n') {
- c = '\0';
- while (!ferror(fp) && !feof(fp)) {
- c = fgetc(fp);
- if (c == '\n')
- break;
- }
- } else
- linebuf[linebuf_len - 1] = '\0';
-
- if ((linebuf[0] == 0) && feof(fp))
- break;
- /*
- * The line we have should be of the form :-
- *
- * username:uid:[32hex bytes]:....other flags presently
- * ignored....
- *
- * or,
- *
- * username:uid:[32hex bytes]:[32hex bytes]:....ignored....
- *
- * if Windows NT compatible passwords are also present.
- */
-
- if (linebuf[0] == '#' || linebuf[0] == '\0')
- continue;
- p = (unsigned char *) strchr(linebuf, ':');
- if (p == NULL)
- continue;
- /*
- * As 256 is shorter than a pstring we don't need to check
- * length here - if this ever changes....
- */
- strncpy(user_name, linebuf, PTR_DIFF(p, linebuf));
- user_name[PTR_DIFF(p, linebuf)] = '\0';
- if (!strequal(user_name, name))
- continue;
-
- /* User name matches - get uid and password */
- p++; /* Go past ':' */
- if (!isdigit(*p))
- return (False);
-
- uidval = atoi((char *) p);
- while (*p && isdigit(*p))
- p++;
-
- if (*p != ':')
- return (False);
-
- /*
- * Now get the password value - this should be 32 hex digits
- * which are the ascii representations of a 16 byte string.
- * Get two at a time and put them into the password.
- */
- p++;
- *pwd_seekpos += PTR_DIFF(p, linebuf); /* Save exact position
- * of passwd in file -
- * this is used by
- * smbpasswd.c */
- if (*p == '*' || *p == 'X') {
- /* Password deliberately invalid - end here. */
- *valid_old_pwd = False;
- *got_valid_nt_entry = False;
- pw_buf.smb_nt_passwd = NULL; /* No NT password (yet)*/
-
- /* Now check if the NT compatible password is
- available. */
- p += 33; /* Move to the first character of the line after
- the lanman password. */
- if ((linebuf_len >= (PTR_DIFF(p, linebuf) + 33)) && (p[32] == ':')) {
- /* NT Entry was valid - even if 'X' or '*', can be overwritten */
- *got_valid_nt_entry = True;
- if (*p != '*' && *p != 'X') {
- if (gethexpwd((char *)p,(char *)smbntpwd))
- pw_buf.smb_nt_passwd = smbntpwd;
- }
- }
- pw_buf.smb_name = user_name;
- pw_buf.smb_userid = uidval;
- pw_buf.smb_passwd = NULL; /* No password */
- return (&pw_buf);
- }
- if (linebuf_len < (PTR_DIFF(p, linebuf) + 33))
- return (False);
-
- if (p[32] != ':')
- return (False);
-
- if (!strncasecmp((char *)p, "NO PASSWORD", 11)) {
- pw_buf.smb_passwd = NULL; /* No password */
- } else {
- if(!gethexpwd((char *)p,(char *)smbpwd))
- return False;
- pw_buf.smb_passwd = smbpwd;
- }
-
- pw_buf.smb_name = user_name;
- pw_buf.smb_userid = uidval;
- pw_buf.smb_nt_passwd = NULL;
- *got_valid_nt_entry = False;
- *valid_old_pwd = True;
-
- /* Now check if the NT compatible password is
- available. */
- p += 33; /* Move to the first character of the line after
- the lanman password. */
- if ((linebuf_len >= (PTR_DIFF(p, linebuf) + 33)) && (p[32] == ':')) {
- /* NT Entry was valid - even if 'X' or '*', can be overwritten */
- *got_valid_nt_entry = True;
- if (*p != '*' && *p != 'X') {
- if (gethexpwd((char *)p,(char *)smbntpwd))
- pw_buf.smb_nt_passwd = smbntpwd;
- }
- }
- return &pw_buf;
- }
- return NULL;
-}
-
-/*
- * Print command usage on stderr and die.
- */
-static void usage(char *name)
-{
- fprintf(stderr, "Usage is : %s [-add] [username] [password]\n", name);
- exit(1);
-}
-
- int main(int argc, char **argv)
-{
- int real_uid;
- struct passwd *pwd;
- fstring old_passwd;
- uchar old_p16[16];
- uchar old_nt_p16[16];
- fstring new_passwd;
- uchar new_p16[16];
- uchar new_nt_p16[16];
- char *p;
- struct smb_passwd *smb_pwent;
- FILE *fp;
- BOOL valid_old_pwd = False;
- BOOL got_valid_nt_entry = False;
- BOOL add_user = False;
- int add_pass = 0;
- long seekpos;
- int pwfd;
- char ascii_p16[66];
- char c;
- int ret, i, err, writelen;
- int lockfd = -1;
- char *pfile = SMB_PASSWD_FILE;
- char readbuf[16 * 1024];
-
- TimeInit();
-
- setup_logging(argv[0],True);
-
- charset_initialise();
-
-#ifndef DEBUG_PASSWORD
- /* Check the effective uid */
- if (geteuid() != 0) {
- fprintf(stderr, "%s: Must be setuid root.\n", argv[0]);
- exit(1);
- }
-#endif
-
- /* Get the real uid */
- real_uid = getuid();
-
- /* Deal with usage problems */
- if (real_uid == 0)
- {
- /* As root we can change anothers password and add a user. */
- if (argc > 4 )
- usage(argv[0]);
- }
- else if (argc == 2 || argc > 3)
- {
- fprintf(stderr, "%s: Only root can set anothers password.\n", argv[0]);
- usage(argv[0]);
- }
-
- if (real_uid == 0 && (argc > 1))
- {
- /* We are root - check if we should add the user */
- if ((argv[1][0] == '-') && (argv[1][1] == 'a'))
- add_user = True;
-
- if(add_user && (argc <= 2 || argc > 4))
- usage(argv[0]);
-
- /* root can specify password on command-line */
- if (argc == (add_user ? 4 : 3))
- {
- /* -a argument (add_user): new password is 3rd argument. */
- /* no -a argument (add_user): new password is 2nd argument */
-
- add_pass = add_user ? 3 : 2;
- }
-
- /* If we are root we can change another's password. */
- strncpy(user_name, add_user ? argv[2] : argv[1], sizeof(user_name) - 1);
- user_name[sizeof(user_name) - 1] = '\0';
-
- pwd = getpwnam(user_name);
- }
- else
- {
- /* non-root can specify old pass / new pass on command-line */
- if (argc == 3)
- {
- /* non-root specifies new password as 2nd argument */
- add_pass = 2;
- }
-
- pwd = getpwuid(real_uid);
- }
-
- if (pwd == 0) {
- fprintf(stderr, "%s: Unable to get UNIX password entry for user.\n", argv[0]);
- exit(1);
- }
-
- /* If we are root we don't ask for the old password. */
- old_passwd[0] = '\0';
- if (real_uid != 0)
- {
- if (add_pass)
- {
- /* old password, as non-root, is 1st argument */
- strncpy(old_passwd, argv[1], sizeof(fstring));
- }
- else
- {
- p = getpass("Old SMB password:");
- strncpy(old_passwd, p, sizeof(fstring));
- }
- old_passwd[sizeof(fstring)-1] = '\0';
- }
-
- if (add_pass)
- {
- /* new password is specified on the command line */
- strncpy(new_passwd, argv[add_user ? 3 : 2], sizeof(new_passwd) - 1);
- new_passwd[sizeof(new_passwd) - 1] = '\0';
- }
- else
- {
- new_passwd[0] = '\0';
-
- p = getpass("New SMB password:");
-
- strncpy(new_passwd, p, sizeof(fstring));
- new_passwd[sizeof(fstring)-1] = '\0';
-
- p = getpass("Retype new SMB password:");
-
- if (strncmp(p, new_passwd, sizeof(fstring)-1))
- {
- fprintf(stderr, "%s: Mismatch - password unchanged.\n", argv[0]);
- exit(1);
- }
- }
-
- if (new_passwd[0] == '\0')
- {
- printf("Password not set\n");
- exit(0);
- }
-
- /* Calculate the MD4 hash (NT compatible) of the old and new passwords */
- memset(old_nt_p16, '\0', 16);
- E_md4hash((uchar *)old_passwd, old_nt_p16);
-
- memset(new_nt_p16, '\0', 16);
- E_md4hash((uchar *) new_passwd, new_nt_p16);
-
- /* Mangle the passwords into Lanman format */
- old_passwd[14] = '\0';
- strupper(old_passwd);
- new_passwd[14] = '\0';
- strupper(new_passwd);
-
- /*
- * Calculate the SMB (lanman) hash functions of both old and new passwords.
- */
-
- memset(old_p16, '\0', 16);
- E_P16((uchar *) old_passwd, old_p16);
-
- memset(new_p16, '\0', 16);
- E_P16((uchar *) new_passwd, new_p16);
-
- /*
- * Open the smbpaswd file XXXX - we need to parse smb.conf to get the
- * filename
- */
- fp = fopen(pfile, "r+");
- if (!fp && errno == ENOENT) {
- fp = fopen(pfile, "w");
- if (fp) {
- fprintf(fp, "# Samba SMB password file\n");
- fclose(fp);
- fp = fopen(pfile, "r+");
- }
- }
- if (!fp) {
- err = errno;
- fprintf(stderr, "%s: Failed to open password file %s.\n",
- argv[0], pfile);
- errno = err;
- perror(argv[0]);
- exit(err);
- }
-
- /* Set read buffer to 16k for effiecient reads */
- setvbuf(fp, readbuf, _IOFBF, sizeof(readbuf));
-
- /* make sure it is only rw by the owner */
- chmod(pfile, 0600);
-
- /* Lock the smbpasswd file for write. */
- if ((lockfd = pw_file_lock(pfile, F_WRLCK, 5)) < 0) {
- err = errno;
- fprintf(stderr, "%s: Failed to lock password file %s.\n",
- argv[0], pfile);
- fclose(fp);
- errno = err;
- perror(argv[0]);
- exit(err);
- }
- /* Get the smb passwd entry for this user */
- smb_pwent = _my_get_smbpwnam(fp, pwd->pw_name, &valid_old_pwd,
- &got_valid_nt_entry, &seekpos);
- if (smb_pwent == NULL) {
- if(add_user == False) {
- fprintf(stderr, "%s: Failed to find entry for user %s in file %s.\n",
- argv[0], pwd->pw_name, pfile);
- fclose(fp);
- pw_file_unlock(lockfd);
- exit(1);
- }
-
- /* Create a new smb passwd entry and set it to the given password. */
- {
- int fd;
- int new_entry_length;
- char *new_entry;
- long offpos;
-
- /* The add user write needs to be atomic - so get the fd from
- the fp and do a raw write() call.
- */
- fd = fileno(fp);
-
- if((offpos = lseek(fd, 0, SEEK_END)) == -1) {
- fprintf(stderr, "%s: Failed to add entry for user %s to file %s. \
-Error was %s\n", argv[0], pwd->pw_name, pfile, strerror(errno));
- fclose(fp);
- pw_file_unlock(lockfd);
- exit(1);
- }
-
- new_entry_length = strlen(pwd->pw_name) + 1 + 15 + 1 +
- 32 + 1 + 32 + 1 + strlen(pwd->pw_gecos) +
- 1 + strlen(pwd->pw_dir) + 1 +
- strlen(pwd->pw_shell) + 1;
- if((new_entry = (char *)malloc( new_entry_length )) == 0) {
- fprintf(stderr, "%s: Failed to add entry for user %s to file %s. \
-Error was %s\n", argv[0], pwd->pw_name, pfile, strerror(errno));
- fclose(fp);
- pw_file_unlock(lockfd);
- exit(1);
- }
-
- sprintf(new_entry, "%s:%u:", pwd->pw_name, pwd->pw_uid);
- p = &new_entry[strlen(new_entry)];
- for( i = 0; i < 16; i++)
- sprintf(&p[i*2], "%02X", new_p16[i]);
- p += 32;
- *p++ = ':';
- for( i = 0; i < 16; i++)
- sprintf(&p[i*2], "%02X", new_nt_p16[i]);
- p += 32;
- *p++ = ':';
- sprintf(p, "%s:%s:%s\n", pwd->pw_gecos,
- pwd->pw_dir, pwd->pw_shell);
- if(write(fd, new_entry, strlen(new_entry)) != strlen(new_entry)) {
- fprintf(stderr, "%s: Failed to add entry for user %s to file %s. \
-Error was %s\n", argv[0], pwd->pw_name, pfile, strerror(errno));
- /* Remove the entry we just wrote. */
- if(ftruncate(fd, offpos) == -1) {
- fprintf(stderr, "%s: ERROR failed to ftruncate file %s. \
-Error was %s. Password file may be corrupt ! Please examine by hand !\n",
- argv[0], pwd->pw_name, strerror(errno));
- }
- fclose(fp);
- pw_file_unlock(lockfd);
- exit(1);
- }
-
- fclose(fp);
- pw_file_unlock(lockfd);
- exit(0);
- }
- } else {
- /* the entry already existed */
- add_user = False;
- }
-
- /* If we are root or the password is 'NO PASSWORD' then
- we don't need to check the old password. */
- if (real_uid != 0) {
- if (valid_old_pwd == False) {
- fprintf(stderr, "%s: User %s has no old SMB password.\n", argv[0], pwd->pw_name);
- }
- /* Check the old Lanman password - NULL means 'NO PASSWORD' */
- if (smb_pwent->smb_passwd != NULL) {
- if (memcmp(old_p16, smb_pwent->smb_passwd, 16)) {
- fprintf(stderr, "%s: Couldn't change password.\n", argv[0]);
- fclose(fp);
- pw_file_unlock(lockfd);
- exit(1);
- }
- }
- /* Check the NT password if it exists */
- if (smb_pwent->smb_nt_passwd != NULL) {
- if (memcmp(old_nt_p16, smb_pwent->smb_nt_passwd, 16)) {
- fprintf(stderr, "%s: Couldn't change password.\n", argv[0]);
- fclose(fp);
- pw_file_unlock(lockfd);
- exit(1);
- }
- }
- }
- /*
- * If we get here either we were root or the old password checked out
- * ok.
- */
- /* Create the 32 byte representation of the new p16 */
- for (i = 0; i < 16; i++) {
- sprintf(&ascii_p16[i * 2], "%02X", (uchar) new_p16[i]);
- }
- if(got_valid_nt_entry) {
- /* Add on the NT md4 hash */
- ascii_p16[32] = ':';
- for (i = 0; i < 16; i++) {
- sprintf(&ascii_p16[(i * 2)+33], "%02X", (uchar) new_nt_p16[i]);
- }
- }
- /*
- * Do an atomic write into the file at the position defined by
- * seekpos.
- */
- pwfd = fileno(fp);
- ret = lseek(pwfd, seekpos - 1, SEEK_SET);
- if (ret != seekpos - 1) {
- err = errno;
- fprintf(stderr, "%s: seek fail on file %s.\n",
- argv[0], pfile);
- fclose(fp);
- errno = err;
- perror(argv[0]);
- pw_file_unlock(lockfd);
- exit(1);
- }
- /* Sanity check - ensure the character is a ':' */
- if (read(pwfd, &c, 1) != 1) {
- err = errno;
- fprintf(stderr, "%s: read fail on file %s.\n",
- argv[0], pfile);
- fclose(fp);
- errno = err;
- perror(argv[0]);
- pw_file_unlock(lockfd);
- exit(1);
- }
- if (c != ':') {
- fprintf(stderr, "%s: sanity check on passwd file %s failed.\n",
- argv[0], pfile);
- fclose(fp);
- pw_file_unlock(lockfd);
- exit(1);
- }
- writelen = (got_valid_nt_entry) ? 65 : 32;
- if (write(pwfd, ascii_p16, writelen) != writelen) {
- err = errno;
- fprintf(stderr, "%s: write fail in file %s.\n",
- argv[0], pfile);
- fclose(fp);
- errno = err;
- perror(argv[0]);
- pw_file_unlock(lockfd);
- exit(err);
- }
- fclose(fp);
- pw_file_unlock(lockfd);
- printf("Password changed\n");
- return 0;
-}
-
diff --git a/source/utils/status.c b/source/utils/status.c
deleted file mode 100644
index 4143244ab4d..00000000000
--- a/source/utils/status.c
+++ /dev/null
@@ -1,526 +0,0 @@
-/*
- Unix SMB/Netbios implementation.
- Version 1.9.
- status reporting
- Copyright (C) Andrew Tridgell 1994-1997
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
- Revision History:
-
- 12 aug 96: Erik.Devriendt@te6.siemens.be
- added support for shared memory implementation of share mode locking
-*/
-
-/*
- * This program reports current SMB connections
- */
-
-#ifdef SYSLOG
-#undef SYSLOG
-#endif
-
-#include "includes.h"
-
-struct connect_record crec;
-
-struct session_record{
- int pid;
- int uid;
- char machine[31];
- time_t start;
- struct session_record *next;
-} *srecs;
-
-extern int DEBUGLEVEL;
-extern FILE *dbf;
-extern pstring myhostname;
-
-static pstring Ucrit_username = ""; /* added by OH */
-int Ucrit_pid[100]; /* Ugly !!! */ /* added by OH */
-int Ucrit_MaxPid=0; /* added by OH */
-unsigned int Ucrit_IsActive = 0; /* added by OH */
-
-#ifndef FAST_SHARE_MODES
-static char *read_share_file(int fd, char *fname, char *progname)
-{
- struct stat sb;
- char *buf;
- int size;
-
- if(fstat(fd, &sb) != 0)
- {
- printf("%s: ERROR: read_share_file: Failed to do stat on share file %s (%s)\n",
- progname, fname, strerror(errno));
- return 0;
- }
-
- if(sb.st_size == 0)
- {
- return 0;
- }
-
- /* Allocate space for the file */
- if((buf = (char *)malloc(sb.st_size)) == NULL)
- {
- printf("%s: read_share_file: malloc for file size %d fail !\n",
- progname, (int)sb.st_size);
- return 0;
- }
-
- if(lseek(fd, 0, SEEK_SET) != 0)
- {
- printf("%s: ERROR: read_share_file: Failed to reset position to 0 \
-for share file %s (%s)\n", progname, fname, strerror(errno));
- if(buf)
- free(buf);
- return 0;
- }
-
- if (read(fd,buf,sb.st_size) != sb.st_size)
- {
- printf("%s: ERROR: read_share_file: Failed to read share file %s (%s)\n",
- progname, fname, strerror(errno));
- if(buf)
- free(buf);
- return 0;
- }
-
- if (IVAL(buf,SMF_VERSION_OFFSET) != LOCKING_VERSION) {
- printf("%s: ERROR: read_share_file: share file %s has incorrect \
-locking version (was %d, should be %d).\n",fname,
- progname, IVAL(buf,SMF_VERSION_OFFSET), LOCKING_VERSION);
- if(buf)
- free(buf);
- return 0;
- }
-
- /* Sanity check for file contents */
- size = sb.st_size;
- size -= SMF_HEADER_LENGTH; /* Remove the header */
-
- /* Remove the filename component. */
- size -= SVAL(buf, SMF_FILENAME_LEN_OFFSET);
-
- /* The remaining size must be a multiple of SMF_ENTRY_LENGTH - error if not. */
- if((size % SMF_ENTRY_LENGTH) != 0)
- {
- printf("%s: ERROR: read_share_file: share file %s is an incorrect length.\n",
- progname, fname);
- if(buf)
- free(buf);
- return 0;
- }
-
- return buf;
-}
-#endif /* FAST_SHARE_MODES */
-
- int main(int argc, char *argv[])
-{
- FILE *f;
- pstring fname;
- int uid, c;
- static pstring servicesf = CONFIGFILE;
- extern char *optarg;
- int verbose = 0, brief =0;
- BOOL firstopen=True;
- BOOL processes_only=False;
- int last_pid=0;
-#ifdef FAST_SHARE_MODES
- pstring shmem_file_name;
- share_mode_record *file_scanner_p;
- smb_shm_offset_t *mode_array;
- int bytes_free, bytes_used, bytes_overhead, bytes_total;
-#else /* FAST_SHARE_MODES */
- void *dir;
- char *s;
-#endif /* FAST_SHARE_MODES */
- int oplock_type;
- int i;
- struct session_record *ptr;
-
-
- TimeInit();
- setup_logging(argv[0],True);
-
- charset_initialise();
-
- DEBUGLEVEL = 0;
- dbf = fopen("/dev/null","w");
-
- if (getuid() != geteuid()) {
- printf("smbstatus should not be run setuid\n");
- return(1);
- }
-
- while ((c = getopt(argc, argv, "pds:u:b")) != EOF) {
- switch (c) {
- case 'b':
- brief = 1;
- break;
- case 'd':
- verbose = 1;
- break;
- case 'p':
- processes_only = 1;
- break;
- case 's':
- strcpy(servicesf, optarg);
- break;
- case 'u': /* added by OH */
- Ucrit_addUsername(optarg); /* added by OH */
- break;
- default:
- fprintf(stderr, "Usage: %s [-d] [-p] [-s configfile] [-u username]\n", *argv); /* changed by OH */
- return (-1);
- }
- }
-
- get_myname(myhostname, NULL);
-
- if (!lp_load(servicesf,False)) {
- fprintf(stderr, "Can't load %s - run testparm to debug it\n", servicesf);
- return (-1);
- }
-
- if (verbose) {
- printf("using configfile = %s\n", servicesf);
- printf("lockdir = %s\n", *lp_lockdir() ? lp_lockdir() : "NULL");
- }
-
- strcpy(fname,lp_lockdir());
- standard_sub_basic(fname);
- trim_string(fname,"","/");
- strcat(fname,"/STATUS..LCK");
-
- f = fopen(fname,"r");
- if (!f) {
- printf("Couldn't open status file %s\n",fname);
- if (!lp_status(-1))
- printf("You need to have status=yes in your smb config file\n");
- return(0);
- }
- else if (verbose) {
- printf("Opened status file %s\n", fname);
- }
-
- uid = getuid();
-
- if (!processes_only) {
- printf("\nSamba version %s\n",VERSION);
-
- if (brief)
- {
- printf("PID Username Machine Time logged in\n");
- printf("-------------------------------------------------------------------\n");
- }
- else
- {
- printf("Service uid gid pid machine\n");
- printf("----------------------------------------------\n");
- }
- }
-
- while (!feof(f))
- {
- if (fread(&crec,sizeof(crec),1,f) != 1)
- break;
- if ( crec.magic == 0x280267 && process_exists(crec.pid)
- && Ucrit_checkUsername(uidtoname(crec.uid)) /* added by OH */
- )
- {
- if (brief)
- {
- ptr=srecs;
- while (ptr!=NULL)
- {
- if ((ptr->pid==crec.pid)&&(strncmp(ptr->machine,crec.machine,30)==0))
- {
- if (ptr->start > crec.start)
- ptr->start=crec.start;
- break;
- }
- ptr=ptr->next;
- }
- if (ptr==NULL)
- {
- ptr=(struct session_record *) malloc(sizeof(struct session_record));
- ptr->uid=crec.uid;
- ptr->pid=crec.pid;
- ptr->start=crec.start;
- strncpy(ptr->machine,crec.machine,30);
- ptr->machine[30]='\0';
- ptr->next=srecs;
- srecs=ptr;
- }
- }
- else
- {
- Ucrit_addPid(crec.pid); /* added by OH */
- if (processes_only) {
- if (last_pid != crec.pid)
- printf("%d\n",crec.pid);
- last_pid = crec.pid; /* XXXX we can still get repeats, have to
- add a sort at some time */
- }
- else
- printf("%-10.10s %-8s %-8s %5d %-8s (%s) %s",
- crec.name,uidtoname(crec.uid),gidtoname(crec.gid),crec.pid,
- crec.machine,crec.addr,
- asctime(LocalTime(&crec.start)));
- }
- }
- }
- fclose(f);
-
- if (processes_only) exit(0);
-
- if (brief)
- {
- ptr=srecs;
- while (ptr!=NULL)
- {
- printf("%-8d%-10.10s%-30.30s%s",ptr->pid,uidtoname(ptr->uid),ptr->machine,asctime(LocalTime(&(ptr->start))));
- ptr=ptr->next;
- }
- printf("\n");
- exit(0);
- }
-
- printf("\n");
-
-#ifdef FAST_SHARE_MODES
- /*******************************************************************
- initialize the shared memory for share_mode management
- ******************************************************************/
-
- strcpy(shmem_file_name,lp_lockdir());
- trim_string(shmem_file_name,"","/");
- if (!*shmem_file_name) exit(-1);
- strcat(shmem_file_name, "/SHARE_MEM_FILE");
- if(!smb_shm_open(shmem_file_name, lp_shmem_size())) exit(-1);
-
- mode_array = (smb_shm_offset_t *)smb_shm_offset2addr(smb_shm_get_userdef_off());
- if(mode_array == NULL)
- {
- printf("%s: base of shared memory hash array == 0! Exiting.\n", argv[0]);
- smb_shm_close();
- exit(-1);
- }
-
- for( i = 0; i < lp_shmem_hash_size(); i++)
- {
- smb_shm_lock_hash_entry(i);
- if(mode_array[i] == NULL_OFFSET)
- {
- smb_shm_unlock_hash_entry(i);
- continue;
- }
- file_scanner_p = (share_mode_record *)smb_shm_offset2addr(mode_array[i]);
- while((file_scanner_p != 0) && (file_scanner_p->num_share_mode_entries != 0))
- {
- share_mode_entry *entry_scanner_p =
- (share_mode_entry *)smb_shm_offset2addr(
- file_scanner_p->share_mode_entries);
-
- while(entry_scanner_p != 0)
- {
- struct timeval t;
- int pid = entry_scanner_p->pid;
- int mode = entry_scanner_p->share_mode;
-
- t.tv_sec = entry_scanner_p->time.tv_sec;
- t.tv_usec = entry_scanner_p->time.tv_usec;
- strcpy(fname, file_scanner_p->file_name);
- oplock_type = entry_scanner_p->op_type;
-
-#else /* FAST_SHARE_MODES */
-
- /* For slow share modes go through all the files in
- the share mode directory and read the entries in
- each.
- */
-
- dir = opendir(lp_lockdir());
- if (!dir)
- {
- printf("%s: Unable to open lock directory %s.\n", argv[0], lp_lockdir());
- return(0);
- }
- while ((s=readdirname(dir))) {
- char *buf;
- char *base;
- int fd;
- pstring lname;
- uint32 dev,inode;
-
- if (sscanf(s,"share.%u.%u",&dev,&inode)!=2) continue;
-
- strcpy(lname,lp_lockdir());
- trim_string(lname,NULL,"/");
- strcat(lname,"/");
- strcat(lname,s);
-
- fd = open(lname,O_RDWR,0);
- if (fd < 0)
- {
- printf("%s: Unable to open share file %s.\n", argv[0], lname);
- continue;
- }
-
- /* Lock the share mode file while we read it. */
- if(fcntl_lock(fd, F_SETLKW, 0, 1, F_WRLCK) == False)
- {
- printf("%s: Unable to lock open share file %s.\n", argv[0], lname);
- close(fd);
- continue;
- }
-
- if(( buf = read_share_file( fd, lname, argv[0] )) == NULL)
- {
- close(fd);
- continue;
- }
- strcpy( fname, &buf[10]);
- close(fd);
-
- base = buf + SMF_HEADER_LENGTH + SVAL(buf,SMF_FILENAME_LEN_OFFSET);
- for( i = 0; i < IVAL(buf, SMF_NUM_ENTRIES_OFFSET); i++)
- {
- char *p = base + (i*SMF_ENTRY_LENGTH);
- struct timeval t;
- int pid = IVAL(p,SME_PID_OFFSET);
- int mode = IVAL(p,SME_SHAREMODE_OFFSET);
-
- t.tv_sec = IVAL(p,SME_SEC_OFFSET);
- t.tv_usec = IVAL(p,SME_USEC_OFFSET);
- oplock_type = SVAL(p,SME_OPLOCK_TYPE_OFFSET);
-#endif /* FAST_SHARE_MODES */
-
- fname[sizeof(fname)-1] = 0;
-
- if (firstopen) {
- firstopen=False;
- printf("Locked files:\n");
- printf("Pid DenyMode R/W Oplock Name\n");
- printf("--------------------------------------------------\n");
- }
-
-
- printf("%-5d ",pid);
- switch ((mode>>4)&0xF)
- {
- case DENY_NONE: printf("DENY_NONE "); break;
- case DENY_ALL: printf("DENY_ALL "); break;
- case DENY_DOS: printf("DENY_DOS "); break;
- case DENY_READ: printf("DENY_READ "); break;
- case DENY_WRITE:printf("DENY_WRITE "); break;
- }
- switch (mode&0xF)
- {
- case 0: printf("RDONLY "); break;
- case 1: printf("WRONLY "); break;
- case 2: printf("RDWR "); break;
- }
-
- if((oplock_type & (EXCLUSIVE_OPLOCK|BATCH_OPLOCK)) == (EXCLUSIVE_OPLOCK|BATCH_OPLOCK))
- printf("EXCLUSIVE+BATCH ");
- else if (oplock_type & EXCLUSIVE_OPLOCK)
- printf("EXCLUSIVE ");
- else if (oplock_type & BATCH_OPLOCK)
- printf("BATCH ");
- else
- printf("NONE ");
-
- printf(" %s %s",fname,asctime(LocalTime((time_t *)&t.tv_sec)));
-
-#ifdef FAST_SHARE_MODES
-
- entry_scanner_p = (share_mode_entry *)smb_shm_offset2addr(
- entry_scanner_p->next_share_mode_entry);
- } /* end while entry_scanner_p */
- file_scanner_p = (share_mode_record *)smb_shm_offset2addr(
- file_scanner_p->next_offset);
- } /* end while file_scanner_p */
- smb_shm_unlock_hash_entry(i);
- } /* end for */
-
- smb_shm_get_usage(&bytes_free, &bytes_used, &bytes_overhead);
- bytes_total = bytes_free + bytes_used + bytes_overhead;
-
- /*******************************************************************
- deinitialize the shared memory for share_mode management
- ******************************************************************/
- smb_shm_close();
-
-#else /* FAST_SHARE_MODES */
- } /* end for i */
-
- if(buf)
- free(buf);
- base = 0;
- } /* end while */
- closedir(dir);
-
-#endif /* FAST_SHARE_MODES */
- if (firstopen)
- printf("No locked files\n");
-#ifdef FAST_SHARE_MODES
- printf("\nShare mode memory usage (bytes):\n");
- printf(" %d(%d%%) free + %d(%d%%) used + %d(%d%%) overhead = %d(100%%) total\n",
- bytes_free, (bytes_free * 100)/bytes_total,
- bytes_used, (bytes_used * 100)/bytes_total,
- bytes_overhead, (bytes_overhead * 100)/bytes_total,
- bytes_total);
-
-#endif /* FAST_SHARE_MODES */
-
- return (0);
-}
-
-/* added by OH */
-void Ucrit_addUsername(pstring username)
-{
- strcpy(Ucrit_username, username);
- if(strlen(Ucrit_username) > 0)
- Ucrit_IsActive = 1;
-}
-
-unsigned int Ucrit_checkUsername(pstring username)
-{
- if ( !Ucrit_IsActive) return 1;
- if (strcmp(Ucrit_username,username) ==0) return 1;
- return 0;
-}
-
-void Ucrit_addPid(int pid)
-{
- int i;
- if ( !Ucrit_IsActive) return;
- for (i=0;i<Ucrit_MaxPid;i++)
- if( pid == Ucrit_pid[i] ) return;
- Ucrit_pid[Ucrit_MaxPid++] = pid;
-}
-
-unsigned int Ucrit_checkPid(int pid)
-{
- int i;
- if ( !Ucrit_IsActive) return 1;
- for (i=0;i<Ucrit_MaxPid;i++)
- if( pid == Ucrit_pid[i] ) return 1;
- return 0;
-}
-
diff --git a/source/utils/testparm.c b/source/utils/testparm.c
deleted file mode 100644
index ca364cb8c94..00000000000
--- a/source/utils/testparm.c
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- Unix SMB/Netbios implementation.
- Version 1.9.
- Test validity of smb.conf
- Copyright (C) Karl Auer 1993, 1994-1997
-
- Extensively modified by Andrew Tridgell, 1995
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-/*
- * Testbed for loadparm.c/params.c
- *
- * This module simply loads a specified configuration file and
- * if successful, dumps it's contents to stdout. Note that the
- * operation is performed with DEBUGLEVEL at 3.
- *
- * Useful for a quick 'syntax check' of a configuration file.
- *
- */
-
-#include "includes.h"
-#include "smb.h"
-
-/* these live in util.c */
-extern FILE *dbf;
-extern int DEBUGLEVEL;
-
- int main(int argc, char *argv[])
-{
- pstring configfile;
- int s;
-
- TimeInit();
-
- setup_logging(argv[0],True);
-
- charset_initialise();
-
- if (argc < 2)
- strcpy(configfile,CONFIGFILE);
- else
- strcpy(configfile,argv[1]);
-
- dbf = stdout;
- DEBUGLEVEL = 2;
-
- printf("Load smb config files from %s\n",configfile);
-
- if (!lp_load(configfile,False))
- {
- printf("Error loading services.\n");
- return(1);
- }
-
-
- printf("Loaded services file OK.\n");
-
- for (s=0;s<1000;s++)
- if (VALID_SNUM(s))
- if (strlen(lp_servicename(s)) > 8) {
- printf("WARNING: You have some share names that are longer than 8 chars\n");
- printf("These may give errors while browsing or may not be accessible\nto some older clients\n");
- break;
- }
-
- if (argc < 4)
- {
- printf("Press enter to see a dump of your service definitions\n");
- fflush(stdout);
- getc(stdin);
- lp_dump(stdout);
- }
-
- if (argc == 4)
- {
- char *cname = argv[2];
- char *caddr = argv[3];
-
- /* this is totally ugly, a real `quick' hack */
- for (s=0;s<1000;s++)
- if (VALID_SNUM(s))
- {
- if (allow_access(lp_hostsdeny(s),lp_hostsallow(s),cname,caddr))
- {
- printf("Allow connection from %s (%s) to %s\n",
- cname,caddr,lp_servicename(s));
- }
- else
- {
- printf("Deny connection from %s (%s) to %s\n",
- cname,caddr,lp_servicename(s));
- }
- }
- }
- return(0);
-}
-
-
diff --git a/source/utils/testprns.c b/source/utils/testprns.c
deleted file mode 100644
index 4a2ddb7c635..00000000000
--- a/source/utils/testprns.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- Unix SMB/Netbios implementation.
- Version 1.9.
- test printer setup
- Copyright (C) Karl Auer 1993, 1994-1997
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-/*
- * Testbed for pcap.c
- *
- * This module simply checks a given printer name against the compiled-in
- * printcap file.
- *
- * The operation is performed with DEBUGLEVEL at 3.
- *
- * Useful for a quick check of a printcap file.
- *
- */
-
-#include "includes.h"
-#include "smb.h"
-
-/* these live in util.c */
-extern FILE *dbf;
-extern int DEBUGLEVEL;
-
-int main(int argc, char *argv[])
-{
- char *pszTemp;
-
- TimeInit();
-
- setup_logging(argv[0],True);
-
- charset_initialise();
-
- if (argc < 2 || argc > 3)
- printf("Usage: testprns printername [printcapfile]\n");
- else
- {
- dbf = fopen("test.log", "w");
- if (dbf == NULL) {
- printf("Unable to open logfile.\n");
- } else {
- DEBUGLEVEL = 3;
- pszTemp = (argc < 3) ? PRINTCAP_NAME : argv[2];
- printf("Looking for printer %s in printcap file %s\n",
- argv[1], pszTemp);
- if (!pcap_printername_ok(argv[1], pszTemp))
- printf("Printer name %s is not valid.\n", argv[1]);
- else
- printf("Printer name %s is valid.\n", argv[1]);
- fclose(dbf);
- }
- }
- return (0);
-}
-