diff options
Diffstat (limited to 'source4/script')
32 files changed, 1972 insertions, 0 deletions
diff --git a/source4/script/.cvsignore b/source4/script/.cvsignore new file mode 100644 index 0000000000..7a8114ecd7 --- /dev/null +++ b/source4/script/.cvsignore @@ -0,0 +1 @@ +findsmb diff --git a/source4/script/addtosmbpass b/source4/script/addtosmbpass new file mode 100644 index 0000000000..bc82851c52 --- /dev/null +++ b/source4/script/addtosmbpass @@ -0,0 +1,74 @@ +#!/usr/bin/awk -f +# edit the line above to point to your real location of awk interpreter + +# awk program for adding new entries in smbpasswd files +# arguments are account names to add; feed it an existent Samba password +# file on stdin, results will be written on stdout +# +# Michal Jaegermann, michal@ellpspace.math.ualberta.ca, 1995-11-09 + +BEGIN { + me = "addtosmbpass"; + count = ARGC; + FS = ":"; + + if (count == 1) { + print "Usage:", me, + "name1 [name2 ....] < smbpasswd.in > smbpasswd.out"; + ARGV[1] = "/dev/null"; + ARGC = 2; + exit; + } + + for(i = 1; i < count; i++) { + names[ARGV[i]] = " "; + delete ARGV[i]; + } +# sane awk should work simply with 'ARGC = 1', but not every awk +# implementation is sane - big sigh!! + ARGV[1] = "-"; + ARGC = 2; +# +# If you have ypmatch but is not RPC registered (some Linux systems +# for example) comment out the next line. +# "which ypmatch" | getline ypmatch; + if (1 != match(ypmatch, /^\//)) { + ypmatch = ""; + } + pwdf = "/etc/passwd"; +} +#check for names already present in input +{ + print $0; + for(name in names) { + if($1 == name) { + delete names[name]; + } + } +} +END { + fmt = "%s:%s:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:"; + fmt = fmt "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:[U ]:LCT-00000000:%s:\n"; + for(name in names) { + while ((getline < pwdf) > 0) { + if ($1 == name) { + printf(fmt, $1, $3, $5); + close(pwdf); + notfound = ""; + break; + } + notfound = "n"; + } + $0 = ""; + if (notfound && ypmatch) { +# try to find in NIS databases + command = ypmatch " " name " passwd"; + command | getline; + if (NF > 0) { + printf(fmt, $1, $3, $5); + } + close(command); + } + } +} + diff --git a/source4/script/build_env.sh b/source4/script/build_env.sh new file mode 100644 index 0000000000..0000759f16 --- /dev/null +++ b/source4/script/build_env.sh @@ -0,0 +1,35 @@ +#!/bin/sh + +uname=`uname -a` +date=`date` +srcdir=$1 +builddir=$2 +compiler=$3 + + if [ ! "x$USER" = "x" ]; then + whoami=$USER + else + if [ ! "x$LOGNAME" = "x" ]; then + whoami=$LOGNAME + else + whoami=`whoami || id -un` + fi + fi + +host=`hostname` + +cat <<EOF +/* This file is automatically generated with "make build_env". DO NOT EDIT */ + +#ifndef _BUILD_ENV_H +#define _BUILD_ENV_H + +#define BUILD_ENV_UNAME "${uname}" +#define BUILD_ENV_DATE "${date}" +#define BUILD_ENV_SRCDIR "${srcdir}" +#define BUILD_ENV_BUILDDIR "${builddir}" +#define BUILD_ENV_USER "${whoami}" +#define BUILD_ENV_HOST "${host}" +#define BUILD_ENV_COMPILER "${compiler}" +#endif /* _BUILD_ENV_H */ +EOF diff --git a/source4/script/convert_smbpasswd b/source4/script/convert_smbpasswd new file mode 100755 index 0000000000..edb775d3a6 --- /dev/null +++ b/source4/script/convert_smbpasswd @@ -0,0 +1,17 @@ +#!/bin/sh +# +# Convert a Samba 1.9.18 smbpasswd file format into +# a Samba 2.0 smbpasswd file format. +# Read from stdin and write to stdout for simplicity. +# Set the last change time to 0x363F96AD to avoid problems +# with trying to work out how to get the seconds since 1970 +# in awk or the shell. JRA. +# +nawk 'BEGIN {FS=":"} +{ + if( $0 ~ "^#" ) { + print $0 + } else { + printf( "%s:%s:%s:%s:[U ]:LCT-363F96AD:\n", $1, $2, $3, $4); + } +}' diff --git a/source4/script/creategroup b/source4/script/creategroup new file mode 100755 index 0000000000..01fb065944 --- /dev/null +++ b/source4/script/creategroup @@ -0,0 +1,27 @@ +#!/bin/sh + +# Example script for 'add group command'. Handle weird NT group +# names. First attempt to create the group directly, if that fails +# then create a random group and print the numeric group id. +# +# Note that this is only an example and assumes /dev/urandom. +# +# Volker + +GROUPNAME="$1" +ITERS=0 + +while ! /usr/sbin/groupadd "$GROUPNAME" > /dev/null 2>&1 +do + # we had difficulties creating that group. Maybe the name was + # too weird, or it already existed. Create a random name. + GROUPNAME=nt-$(dd if=/dev/urandom bs=16 count=1 2>/dev/null | md5sum | cut -b 1-5) + ITERS=$(expr "$ITERS" + 1) + if [ "$ITERS" -gt 10 ] + then + # Too many attempts + exit 1 + fi +done + +getent group | grep ^"$GROUPNAME": | cut -d : -f 3 diff --git a/source4/script/extract_allparms.sh b/source4/script/extract_allparms.sh new file mode 100755 index 0000000000..f16068b3fd --- /dev/null +++ b/source4/script/extract_allparms.sh @@ -0,0 +1,2 @@ +#!/bin/sh +grep '{".*P_[GL]' param/loadparm.c | sed -e 's/&.*$//g' -e 's/",.*P_LOCAL.*$/ S/' -e 's/",.*P_GLOBAL.*$/ G/' -e 's/^ .*{"//g' | sort -f diff --git a/source4/script/find_missing_doc.pl b/source4/script/find_missing_doc.pl new file mode 100755 index 0000000000..b27a405e4d --- /dev/null +++ b/source4/script/find_missing_doc.pl @@ -0,0 +1,90 @@ +#!/usr/bin/perl + +my $doc_file = "/docs/docbook/manpages/smb.conf.5.sgml"; +my $source_file = "/source/param/loadparm.c"; + +my %link,%doc,%param; + +# This one shouldn't be documented at all +$doc{-valid} = "FOUND"; + +$topdir = (shift @ARGV) or $topdir = "."; + +################################################## +# Reading links from manpage + +open(IN,$topdir.$doc_file); + +while(<IN>) { + if( /<listitem><para><link linkend="([^"]*)"><parameter>([^<]*)<\/parameter><\/link><\/para><\/listitem>/g ){ + $link{$2} = $1; + $ref{$1} = $2; + } +} + +close(IN); + +################################################## +# Reading documentation from manpage + +open(IN,$topdir.$doc_file) || die("Can't open $topdir$doc_file"); + +while(<IN>) { + if( /<term><anchor id="([^"]*)"\/>([^<]*?)([ ]*)\(.\)([ ]*)<\/term>/g ) { + $key = $1; + $value = $2; + $doc{$value} = $key; + + # There is a reference to this entry + if($ref{$key} eq $value){ + $ref{$key} = "FOUND"; + } else { + if($ref{$key}) { + print "$key should refer to $value, but refers to " . $ref{$key} . "\n"; + } else { + print "$key should refer to $value, but has no reference!\n"; + } + $ref{$key} = $value; + } + } +} + +close(IN); + +################################################# +# Reading entries from source code + +open(SOURCE,$topdir.$source_file) || die("Can't open $topdir$source_file"); + +while ($ln = <SOURCE>) { + last if $ln =~ m/^static\ struct\ parm_struct\ parm_table.*/; +} #burn through the preceding lines + +while ($ln = <SOURCE>) { + last if $ln =~ m/^\s*\}\;\s*$/; + #pull in the param names only + next if $ln =~ m/.*P_SEPARATOR.*/; + next unless $ln =~ /.*\"(.*)\".*/; + + if($doc{lc($1)}) { + $doc{lc($1)} = "FOUND"; + } else { + print "$1 is not documented!\n"; + } +} +close SOURCE; + +################################################## +# Trying to find missing references + +foreach (keys %ref) { + if($ref{$_} cmp "FOUND") { + print "$_ references to " . $ref{$_} . ", but " . $ref{$_} . " isn't an anchor!\n"; + } +} + +foreach (keys %doc) { + if($doc{$_} cmp "FOUND") { + print "$_ is documented but is not a configuration option!\n"; + } +} diff --git a/source4/script/findsmb.in b/source4/script/findsmb.in new file mode 100755 index 0000000000..6276bd3f39 --- /dev/null +++ b/source4/script/findsmb.in @@ -0,0 +1,152 @@ +#!@PERL@ +# +# Prints info on all smb responding machines on a subnet. +# This script needs to be run on a machine without nmbd running and be +# run as root to get correct info from WIN95 clients. +# +# syntax: +# findsmb [-d|-D] [-r] [subnet broadcast address] +# +# with no agrument it will list machines on the current subnet +# +# There will be a "+" in front of the workgroup name for machines that are +# local master browsers for that workgroup. There will be an "*" in front +# of the workgroup name for machines that are the domain master browser for +# that workgroup. +# +# Options: +# +# -d|-D enable debug +# -r add -r option to nmblookup when finding netbios name +# + +$SAMBABIN = "@prefix@/bin"; + +for ($i = 0; $i < 2; $i++) { # test for -d and -r options + $_ = shift; + if (m/-d|-D/) { + $DEBUG = 1; + } elsif (m/-r/) { + $R_OPTION = "-r"; + } +} + +if ($_) { # set broadcast address if it was specified + $BCAST = "-B $_"; +} + +sub ipsort # do numeric sort on last field of IP address +{ + @t1 = split(/\./,$a); + @t2 = split(/\./,$b); + @t1[3] <=> @t2[3]; +} + +# look for all machines that respond to a name lookup + +open(NMBLOOKUP,"$SAMBABIN/nmblookup $BCAST '*'|") || + die("Can't run nmblookup '*'.\n"); + +# get rid of all lines that are not a response IP address, +# strip everything but IP address and sort by last field in address + +@ipaddrs = sort ipsort grep(s/ \*<00>.*$//,<NMBLOOKUP>); + +# print header info + +print "\nIP ADDR NETBIOS NAME WORKGROUP/OS/VERSION $BCAST\n"; +print "---------------------------------------------------------------------\n"; + +foreach $ip (@ipaddrs) # loop through each IP address found +{ + $ip =~ s/\n//; # strip newline from IP address + +# find the netbios names registered by each machine + + open(NMBLOOKUP,"$SAMBABIN/nmblookup $R_OPTION -A $ip|") || + die("Can't get nmb name list.\n"); + @nmblookup = <NMBLOOKUP>; + close NMBLOOKUP; + +# get the first <00> name + + @name = grep(/<00>/,@nmblookup); + $_ = @name[0]; + if ($_) { # we have a netbios name + if (/GROUP/) { # is it a group name + ($name, $aliases, $type, $length, @addresses) = + gethostbyaddr(pack('C4',split('\.',$ip)),2); + if (! $name) { # could not get name + $name = "unknown nis name"; + } + } else { +# The Netbios name can contain lot of characters also '<' '>' +# and spaces. The follwing cure inside name space but not +# names starting or ending with spaces + /(.{1,15})\s+<00>\s+/; + $name = $1; + } + +# do an smbclient command on the netbios name. + + open(SMB,"$SAMBABIN/smbclient -N -L $name -I $ip -U% |") || + die("Can't do smbclient command.\n"); + @smb = <SMB>; + close SMB; + + if ($DEBUG) { # if -d flag print results of nmblookup and smbclient + print "===============================================================\n"; + print @nmblookup; + print @smb; + } + +# look for the OS= string + + @info = grep(/OS=/,@smb); + $_ = @info[0]; + if ($_) { # we found response + s/Domain=|OS=|Server=|\n//g; # strip out descriptions to make line shorter + + } else { # no OS= string in response (WIN95 client) + +# for WIN95 clients get workgroup name from nmblookup response + @name = grep(/<00> - <GROUP>/,@nmblookup); + $_ = @name[0]; + if ($_) { +# Same as before for space and characters + /(.{1,15})\s+<00>\s+/; + $_ = "[$1]"; + } else { + $_ = "Unknown Workgroup"; + } + } + +# see if machine registered a local master browser name + if (grep(/<1d>/,@nmblookup)) { + $master = '+'; # indicate local master browser + if (grep(/<1b>/,@nmblookup)) { # how about domain master browser? + $master = '*'; # indicate domain master browser + } + } else { + $master = ' '; # not a browse master + } + +# line up info in 3 columns + + print "$ip".' 'x(16-length($ip))."$name".' 'x(14-length($name))."$master"."$_\n"; + + } else { # no netbios name found +# try getting the host name + ($name, $aliases, $type, $length, @addresses) = + gethostbyaddr(pack('C4',split('\.',$ip)),2); + if (! $name) { # could not get name + $name = "unknown nis name"; + } + if ($DEBUG) { # if -d flag print results of nmblookup + print "===============================================================\n"; + print @nmblookup; + } + print "$ip".' 'x(16-length($ip))."$name\n"; + } +} + diff --git a/source4/script/findstatic.pl b/source4/script/findstatic.pl new file mode 100755 index 0000000000..43a4916435 --- /dev/null +++ b/source4/script/findstatic.pl @@ -0,0 +1,70 @@ +#!/usr/bin/perl -w +# find a list of fns and variables in the code that could be static +# usually called with something like this: +# findstatic.pl `find . -name "*.o"` +# Andrew Tridgell <tridge@samba.org> + +use strict; + +# use nm to find the symbols +my($saved_delim) = $/; +undef $/; +my($syms) = `nm -o @ARGV`; +$/ = $saved_delim; + +my(@lines) = split(/\n/s, $syms); + +my(%def); +my(%undef); +my(%stype); + +my(%typemap) = ( + "T" => "function", + "C" => "uninitialised variable", + "D" => "initialised variable" + ); + + +# parse the symbols into defined and undefined +for (my($i)=0; $i <= $#{@lines}; $i++) { + my($line) = $lines[$i]; + if ($line =~ /(.*):[a-f0-9]* ([TCD]) (.*)/) { + my($fname) = $1; + my($symbol) = $3; + push(@{$def{$fname}}, $symbol); + $stype{$symbol} = $2; + } + if ($line =~ /(.*):\s* U (.*)/) { + my($fname) = $1; + my($symbol) = $2; + push(@{$undef{$fname}}, $symbol); + } +} + +# look for defined symbols that are never referenced outside the place they +# are defined +foreach my $f (keys %def) { + print "Checking $f\n"; + my($found_one) = 0; + foreach my $s (@{$def{$f}}) { + my($found) = 0; + foreach my $f2 (keys %undef) { + if ($f2 ne $f) { + foreach my $s2 (@{$undef{$f2}}) { + if ($s2 eq $s) { + $found = 1; + $found_one = 1; + } + } + } + } + if ($found == 0) { + my($t) = $typemap{$stype{$s}}; + print " '$s' is unique to $f ($t)\n"; + } + } + if ($found_one == 0) { + print " all symbols in '$f' are unused (main program?)\n"; + } +} + diff --git a/source4/script/genstruct.pl b/source4/script/genstruct.pl new file mode 100755 index 0000000000..081b81f510 --- /dev/null +++ b/source4/script/genstruct.pl @@ -0,0 +1,298 @@ +#!/usr/bin/perl -w +# a simple system for generating C parse info +# this can be used to write generic C structer load/save routines +# Copyright 2002 Andrew Tridgell <genstruct@tridgell.net> +# released under the GNU General Public License v2 or later + +use strict; + +my(%enum_done) = (); +my(%struct_done) = (); + +################################################### +# general handler +sub handle_general($$$$$$$$) +{ + my($name) = shift; + my($ptr_count) = shift; + my($size) = shift; + my($element) = shift; + my($flags) = shift; + my($dump_fn) = shift; + my($parse_fn) = shift; + my($tflags) = shift; + my($array_len) = 0; + my($dynamic_len) = "NULL"; + + # handle arrays, currently treat multidimensional arrays as 1 dimensional + while ($element =~ /(.*)\[(.*?)\]$/) { + $element = $1; + if ($array_len == 0) { + $array_len = $2; + } else { + $array_len = "$2 * $array_len"; + } + } + + if ($flags =~ /_LEN\((\w*?)\)/) { + $dynamic_len = "\"$1\""; + } + + if ($flags =~ /_NULLTERM/) { + $tflags = "FLAG_NULLTERM"; + } + + print OFILE "{\"$element\", $ptr_count, $size, offsetof(struct $name, $element), $array_len, $dynamic_len, $tflags, $dump_fn, $parse_fn},\n"; +} + + +#################################################### +# parse one element +sub parse_one($$$$) +{ + my($name) = shift; + my($type) = shift; + my($element) = shift; + my($flags) = shift; + my($ptr_count) = 0; + my($size) = "sizeof($type)"; + my($tflags) = "0"; + + # enums get the FLAG_ALWAYS flag + if ($type =~ /^enum /) { + $tflags = "FLAG_ALWAYS"; + } + + + # make the pointer part of the base type + while ($element =~ /^\*(.*)/) { + $ptr_count++; + $element = $1; + } + + # convert spaces to _ + $type =~ s/ /_/g; + + my($dump_fn) = "gen_dump_$type"; + my($parse_fn) = "gen_parse_$type"; + + handle_general($name, $ptr_count, $size, $element, $flags, $dump_fn, $parse_fn, $tflags); +} + +#################################################### +# parse one element +sub parse_element($$$) +{ + my($name) = shift; + my($element) = shift; + my($flags) = shift; + my($type); + my($data); + + # pull the base type + if ($element =~ /^struct (\S*) (.*)/) { + $type = "struct $1"; + $data = $2; + } elsif ($element =~ /^enum (\S*) (.*)/) { + $type = "enum $1"; + $data = $2; + } elsif ($element =~ /^unsigned (\S*) (.*)/) { + $type = "unsigned $1"; + $data = $2; + } elsif ($element =~ /^(\S*) (.*)/) { + $type = $1; + $data = $2; + } else { + die "Can't parse element '$element'"; + } + + # handle comma separated lists + while ($data =~ /(\S*),[\s]?(.*)/) { + parse_one($name, $type, $1, $flags); + $data = $2; + } + parse_one($name, $type, $data, $flags); +} + + +my($first_struct) = 1; + +#################################################### +# parse the elements of one structure +sub parse_elements($$) +{ + my($name) = shift; + my($elements) = shift; + + if ($first_struct) { + $first_struct = 0; + print "Parsing structs: $name"; + } else { + print ", $name"; + } + + print OFILE "int gen_dump_struct_$name(struct parse_string *, const char *, unsigned);\n"; + print OFILE "int gen_parse_struct_$name(char *, const char *);\n"; + + print OFILE "static const struct parse_struct pinfo_" . $name . "[] = {\n"; + + while ($elements =~ /^.*?([a-z].*?);\s*?(\S*?)\s*?\$(.*)/msi) { + my($element) = $1; + my($flags) = $2; + $elements = $3; + parse_element($name, $element, $flags); + } + + print OFILE "{NULL, 0, 0, 0, 0, NULL, 0, NULL, NULL}};\n"; + + print OFILE " +int gen_dump_struct_$name(struct parse_string *p, const char *ptr, unsigned indent) { + return gen_dump_struct(pinfo_$name, p, ptr, indent); +} +int gen_parse_struct_$name(char *ptr, const char *str) { + return gen_parse_struct(pinfo_$name, ptr, str); +} + +"; +} + +my($first_enum) = 1; + +#################################################### +# parse out the enum declarations +sub parse_enum_elements($$) +{ + my($name) = shift; + my($elements) = shift; + + if ($first_enum) { + $first_enum = 0; + print "Parsing enums: $name"; + } else { + print ", $name"; + } + + print OFILE "static const struct enum_struct einfo_" . $name . "[] = {\n"; + + my(@enums) = split(/,/s, $elements); + for (my($i)=0; $i <= $#{@enums}; $i++) { + my($enum) = $enums[$i]; + if ($enum =~ /\s*(\w*)/) { + my($e) = $1; + print OFILE "{\"$e\", $e},\n"; + } + } + + print OFILE "{NULL, 0}};\n"; + + print OFILE " +int gen_dump_enum_$name(struct parse_string *p, const char *ptr, unsigned indent) { + return gen_dump_enum(einfo_$name, p, ptr, indent); +} + +int gen_parse_enum_$name(char *ptr, const char *str) { + return gen_parse_enum(einfo_$name, ptr, str); +} + +"; +} + +#################################################### +# parse out the enum declarations +sub parse_enums($) +{ + my($data) = shift; + + while ($data =~ /^GENSTRUCT\s+enum\s+(\w*?)\s*{(.*?)}\s*;(.*)/ms) { + my($name) = $1; + my($elements) = $2; + $data = $3; + + if (!defined($enum_done{$name})) { + $enum_done{$name} = 1; + parse_enum_elements($name, $elements); + } + } + + if (! $first_enum) { + print "\n"; + } +} + +#################################################### +# parse all the structures +sub parse_structs($) +{ + my($data) = shift; + + # parse into structures + while ($data =~ /^GENSTRUCT\s+struct\s+(\w+?)\s*{\s*(.*?)\s*}\s*;(.*)/ms) { + my($name) = $1; + my($elements) = $2; + $data = $3; + if (!defined($struct_done{$name})) { + $struct_done{$name} = 1; + parse_elements($name, $elements); + } + } + + if (! $first_struct) { + print "\n"; + } else { + print "No GENSTRUCT structures found?\n"; + } +} + + +#################################################### +# parse a header file, generating a dumper structure +sub parse_data($) +{ + my($data) = shift; + + # collapse spaces + $data =~ s/[\t ]+/ /sg; + $data =~ s/\s*\n\s+/\n/sg; + # strip debug lines + $data =~ s/^\#.*?\n//smg; + + parse_enums($data); + parse_structs($data); +} + + +######################################### +# display help text +sub ShowHelp() +{ + print " +generator for C structure dumpers +Copyright Andrew Tridgell <genstruct\@tridgell.net> + +Sample usage: + genstruct -o output.h gcc -E -O2 -g test.h + +Options: + --help this help page + -o OUTPUT place output in OUTPUT +"; + exit(0); +} + +######################################## +# main program +if ($ARGV[0] ne "-o" || $#ARGV < 2) { + ShowHelp(); +} + +shift; +my($opt_ofile)=shift; + +print "creating $opt_ofile\n"; + +open(OFILE, ">$opt_ofile") || die "can't open $opt_ofile"; + +print OFILE "/* This is an automatically generated file - DO NOT EDIT! */\n\n"; + +parse_data(`@ARGV -DGENSTRUCT=GENSTRUCT`); +exit(0); diff --git a/source4/script/installbin.sh b/source4/script/installbin.sh new file mode 100644 index 0000000000..c2f34082dd --- /dev/null +++ b/source4/script/installbin.sh @@ -0,0 +1,40 @@ +#!/bin/sh + +INSTALLPERMS=$1 +BASEDIR=$2 +BINDIR=$3 +LIBDIR=$4 +VARDIR=$5 +shift +shift +shift +shift +shift + +for p in $*; do + p2=`basename $p` + echo Installing $p as $BINDIR/$p2 + if [ -f $BINDIR/$p2 ]; then + rm -f $BINDIR/$p2.old + mv $BINDIR/$p2 $BINDIR/$p2.old + fi + cp $p $BINDIR/ + chmod $INSTALLPERMS $BINDIR/$p2 + + # this is a special case, mount needs this in a specific location + if [ $p2 = smbmount ]; then + ln -sf $BINDIR/$p2 /sbin/mount.smbfs + fi +done + + +cat << EOF +====================================================================== +The binaries are installed. You may restore the old binaries (if there +were any) using the command "make revert". You may uninstall the binaries +using the command "make uninstallbin" or "make uninstall" to uninstall +binaries, man pages and shell scripts. +====================================================================== +EOF + +exit 0 diff --git a/source4/script/installdat.sh b/source4/script/installdat.sh new file mode 100755 index 0000000000..7ff88ac788 --- /dev/null +++ b/source4/script/installdat.sh @@ -0,0 +1,23 @@ +#!/bin/sh +#fist version March 2002, Herb Lewis + +DATDIR=$1 +SRCDIR=$2/ + +echo Installing dat files in $DATDIR + +for f in $SRCDIR/codepages/*.dat; do + FNAME=$DATDIR/`basename $f` + echo $FNAME + cp $f $FNAME || echo Cannot install $FNAME. Does $USER have privileges? + chmod 0644 $FNAME +done + +cat << EOF +====================================================================== +The dat files have been installed. +====================================================================== +EOF + +exit 0 + diff --git a/source4/script/installdirs.sh b/source4/script/installdirs.sh new file mode 100755 index 0000000000..9557b86d3b --- /dev/null +++ b/source4/script/installdirs.sh @@ -0,0 +1,17 @@ +#!/bin/sh + +while ( test -n "$1" ); do + if [ ! -d $1 ]; then + mkdir -p $1 + fi + + if [ ! -d $1 ]; then + echo Failed to make directory $1 + exit 1 + fi + + shift; +done + + + diff --git a/source4/script/installman.sh b/source4/script/installman.sh new file mode 100644 index 0000000000..5b6bba69ed --- /dev/null +++ b/source4/script/installman.sh @@ -0,0 +1,71 @@ +#!/bin/sh +#5 July 96 Dan.Shearer@unisa.edu.au removed hardcoded values +# +# 13 Aug 2001 Rafal Szczesniak <mimir@spin.ict.pwr.wroc.pl> +# modified to accomodate international man pages (inspired +# by Japanese edition's approach) + +MANDIR=$1 +SRCDIR=$2/ +langs=$3 + +if [ $# -ge 4 ] ; then + GROFF=$4 # sh cmd line, including options +fi + + +for lang in $langs; do + if [ "X$lang" = Xen ]; then + echo Installing default man pages in $MANDIR/ + lang=. + else + echo Installing \"$lang\" man pages in $MANDIR/lang/$lang + fi + + langdir=$MANDIR/$lang + for d in $MANDIR $langdir $langdir/man1 $langdir/man5 $langdir/man7 $langdir/man8; do + if [ ! -d $d ]; then + mkdir $d + if [ ! -d $d ]; then + echo Failed to make directory $d, does $USER have privileges? + exit 1 + fi + fi + done + + for sect in 1 5 7 8 ; do + for m in $langdir/man$sect ; do + for s in $SRCDIR../docs/manpages/$lang/*$sect; do + FNAME=$m/`basename $s` + + # Test for writability. Involves + # blowing away existing files. + + if (rm -f $FNAME && touch $FNAME); then + rm $FNAME + if [ "x$GROFF" = x ] ; then + cp $s $m # Copy raw nroff + else + echo "\t$FNAME" # groff'ing can be slow, give the user + # a warm fuzzy. + $GROFF $s > $FNAME # Process nroff, because man(1) (on + # this system) doesn't . + fi + chmod 0644 $FNAME + else + echo Cannot create $FNAME... does $USER have privileges? + fi + done + done + done +done +cat << EOF +====================================================================== +The man pages have been installed. You may uninstall them using the command +the command "make uninstallman" or make "uninstall" to uninstall binaries, +man pages and shell scripts. +====================================================================== +EOF + +exit 0 + diff --git a/source4/script/installmodules.sh b/source4/script/installmodules.sh new file mode 100644 index 0000000000..ec5691992d --- /dev/null +++ b/source4/script/installmodules.sh @@ -0,0 +1,36 @@ +#!/bin/sh + +INSTALLPERMS=$1 +BASEDIR=$2 +LIBDIR=$3 +shift +shift +shift + +for d in $BASEDIR $LIBDIR; do +if [ ! -d $d ]; then +mkdir $d +if [ ! -d $d ]; then + echo Failed to make directory $d + exit 1 +fi +fi +done + +for p in $*; do + p2=`basename $p` + echo Installing $p as $LIBDIR/$p2 + cp -f $p $LIBDIR/ + chmod $INSTALLPERMS $LIBDIR/$p2 +done + + +cat << EOF +====================================================================== +The modules are installed. You may uninstall the modules using the +command "make uninstallmodules" or "make uninstall" to uninstall +binaries, man pages, shell scripts and modules. +====================================================================== +EOF + +exit 0 diff --git a/source4/script/installscripts.sh b/source4/script/installscripts.sh new file mode 100644 index 0000000000..bff5423e7c --- /dev/null +++ b/source4/script/installscripts.sh @@ -0,0 +1,47 @@ +#!/bin/sh +# this script courtesy of James_K._Foote.PARC@xerox.com +# 5 July 96 Dan.Shearer@UniSA.Edu.Au Don't hardcode script names, get from Make + +INSTALLPERMS=$1 +BINDIR=$2 + +shift +shift + +echo Installing scripts in $BINDIR + +for d in $BINDIR; do + if [ ! -d $d ]; then + mkdir $d + if [ ! -d $d ]; then + echo Failed to make directory $d + echo Have you run installbin first? + exit 1 + fi + fi +done + +for p in $*; do + p2=`basename $p` + echo Installing $BINDIR/$p2 + if [ -f $BINDIR/$p2 ]; then + rm -f $BINDIR/$p2.old + mv $BINDIR/$p2 $BINDIR/$p2.old + fi + cp $p $BINDIR/ + chmod $INSTALLPERMS $BINDIR/$p2 + if [ ! -f $BINDIR/$p2 ]; then + echo Cannot copy $p2... does $USER have privileges? + fi +done + +cat << EOF +====================================================================== +The scripts have been installed. You may uninstall them using +the command "make uninstallscripts" or "make install" to install binaries, +man pages and shell scripts. You may recover the previous version (if any +by "make revert". +====================================================================== +EOF + +exit 0 diff --git a/source4/script/installswat.sh b/source4/script/installswat.sh new file mode 100644 index 0000000000..c66604cdb8 --- /dev/null +++ b/source4/script/installswat.sh @@ -0,0 +1,127 @@ +#!/bin/sh +#fist version March 1998, Andrew Tridgell + +SWATDIR=$1 +SRCDIR=$2/ +BOOKDIR=$SWATDIR/using_samba + +echo Installing SWAT in $SWATDIR +echo Installing the Samba Web Administration Tool + +LANGS=". `cd $SRCDIR../swat/; /bin/echo lang/??`" +echo Installing langs are `cd $SRCDIR../swat/lang/; /bin/echo ??` + +for ln in $LANGS; do + SWATLANGDIR=$SWATDIR/$ln + for d in $SWATLANGDIR $SWATLANGDIR/help $SWATLANGDIR/images \ + $SWATLANGDIR/include; do + if [ ! -d $d ]; then + mkdir -p $d + if [ ! -d $d ]; then + echo Failed to make directory $d, does $USER have privileges? + exit 1 + fi + fi + done +done + +# Install images +for ln in $LANGS; do + +for f in $SRCDIR../swat/$ln/images/*.gif; do + FNAME=$SWATDIR/$ln/images/`basename $f` + echo $FNAME + cp $f $FNAME || echo Cannot install $FNAME. Does $USER have privileges? + chmod 0644 $FNAME +done + +# Install html help + +for f in $SRCDIR../swat/$ln/help/*.html; do + FNAME=$SWATDIR/$ln/help/`basename $f` + echo $FNAME + if [ "x$BOOKDIR" = "x" ]; then + cat $f | sed 's/@BOOKDIR@.*$//' > $f.tmp + else + cat $f | sed 's/@BOOKDIR@//' > $f.tmp + fi + f=$f.tmp + cp $f $FNAME || echo Cannot install $FNAME. Does $USER have privileges? + rm -f $f + chmod 0644 $FNAME +done + +# Install html documentation + +for f in $SRCDIR../docs/htmldocs/*.html; do + FNAME=$SWATDIR/help/`basename $f` + echo $FNAME + cp $f $FNAME || echo Cannot install $FNAME. Does $USER have privileges? + chmod 0644 $FNAME +done + +# Install "server-side" includes + +for f in $SRCDIR../swat/$ln/include/*.html; do + FNAME=$SWATDIR/$ln/include/`basename $f` + echo $FNAME + cp $f $FNAME || echo Cannot install $FNAME. Does $USER have privileges? + chmod 0644 $FNAME +done + +done + +# Install Using Samba book + +if [ "x$BOOKDIR" != "x" ]; then + + # Create directories + + for d in $BOOKDIR $BOOKDIR/figs $BOOKDIR/gifs; do + if [ ! -d $d ]; then + mkdir $d + if [ ! -d $d ]; then + echo Failed to make directory $d, does $USER have privileges? + exit 1 + fi + fi + done + + # HTML files + + for f in $SRCDIR../docs/htmldocs/using_samba/*.html; do + FNAME=$BOOKDIR/`basename $f` + echo $FNAME + cp $f $FNAME || echo Cannot install $FNAME. Does $USER have privileges? + chmod 0644 $FNAME + done + + # Figures + + for f in $SRCDIR../docs/htmldocs/using_samba/figs/*.gif; do + FNAME=$BOOKDIR/figs/`basename $f` + echo $FNAME + cp $f $FNAME || echo Cannot install $FNAME. Does $USER have privileges? + chmod 0644 $FNAME + done + + # Gifs + + for f in $SRCDIR../docs/htmldocs/using_samba/gifs/*.gif; do + FNAME=$BOOKDIR/gifs/`basename $f` + echo $FNAME + cp $f $FNAME || echo Cannot install $FNAME. Does $USER have privileges? + chmod 0644 $FNAME + done + +fi + +cat << EOF +====================================================================== +The SWAT files have been installed. Remember to read the swat/README +for information on enabling and using SWAT +====================================================================== +EOF + +exit 0 + diff --git a/source4/script/makeunicodecasemap.awk b/source4/script/makeunicodecasemap.awk new file mode 100644 index 0000000000..8424b6c672 --- /dev/null +++ b/source4/script/makeunicodecasemap.awk @@ -0,0 +1,59 @@ +function reset_vals() { + upperstr = ""; + lowerstr = ""; + flagstr = "0"; +} + +function print_val() { + upperstr = $13; + lowerstr = $14; + if ( upperstr == "" ) + upperstr = strval; + if ( lowerstr == "" ) + lowerstr = strval; + + if ( $3 == "Lu" ) + flagstr = sprintf("%s|%s", flagstr, "UNI_UPPER"); + if ( $3 == "Ll" ) + flagstr = sprintf("%s|%s", flagstr, "UNI_LOWER"); + if ( val >= 48 && val <= 57) + flagstr = sprintf("%s|%s", flagstr, "UNI_DIGIT"); + if ((val >= 48 && val <= 57) || (val >= 65 && val <= 70) || (val >=97 && val <= 102)) + flagstr = sprintf("%s|%s", flagstr, "UNI_XDIGIT"); + if ( val == 32 || (val >=9 && val <= 13)) + flagstr = sprintf("%s|%s", flagstr, "UNI_SPACE"); + if( index(flagstr, "0|") == 1) + flagstr = substr(flagstr, 3, length(flagstr) - 2); + printf("{ 0x%s, 0x%s, %s }, \t\t\t/* %s %s */\n", lowerstr, upperstr, flagstr, strval, $2); + val++; + strval=sprintf("%04X", val); + reset_vals(); +} + +BEGIN { + val=0 + FS=";" + strval=sprintf("%04X", val); + reset_vals(); +} + +{ + if ( $1 == strval ) { + print_val(); + } else { + while ( $1 != strval) { + printf("{ 0x%04X, 0x%04X, 0 }, \t\t\t/* %s NOMAP */\n", val, val, strval); + val++; + strval=sprintf("%04X", val); + } + print_val(); + } +} + +END { + while ( val < 65536 ) { + printf("{ 0x%04X, 0x%04X, 0 }, \t\t\t/* %s NOMAP */\n", val, val, strval); + val++; + strval=sprintf("%04X", val); + } +} diff --git a/source4/script/mkinstalldirs b/source4/script/mkinstalldirs new file mode 100755 index 0000000000..f945dbf2bc --- /dev/null +++ b/source4/script/mkinstalldirs @@ -0,0 +1,38 @@ +#! /bin/sh +# mkinstalldirs --- make directory hierarchy +# Author: Noah Friedman <friedman@prep.ai.mit.edu> +# Created: 1993-05-16 +# Public domain + +errstatus=0 + +for file +do + set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` + shift + + pathcomp= + for d + do + pathcomp="$pathcomp$d" + case "$pathcomp" in + -* ) pathcomp=./$pathcomp ;; + esac + + if test ! -d "$pathcomp"; then + echo "mkdir $pathcomp" 1>&2 + + mkdir "$pathcomp" || lasterr=$? + + if test ! -d "$pathcomp"; then + errstatus=$lasterr + fi + fi + + pathcomp="$pathcomp/" + done +done + +exit $errstatus + +# mkinstalldirs ends here diff --git a/source4/script/mknissmbpasswd.sh b/source4/script/mknissmbpasswd.sh new file mode 100755 index 0000000000..a94c963bdc --- /dev/null +++ b/source4/script/mknissmbpasswd.sh @@ -0,0 +1,31 @@ +#!/bin/sh +# +# Copyright (C) 1998 Benny Holmgren +# +# Script to import smbpasswd file into the smbpasswd NIS+ table. Reads +# from stdin the smbpasswd file. +# +while true +do + read row + if [ -z "$row" ] + then + break + fi + + if [ "`echo $row | cut -c1`" = "#" ] + then + continue + fi + + nistbladm -a \ + name=\"`echo $row | cut -d: -f1`\" \ + uid=\"`echo $row | cut -d: -f2`\" \ + lmpwd=\"`echo $row | cut -d: -f3`\" \ + ntpwd=\"`echo $row | cut -d: -f4`\" \ + acb=\"`echo $row | cut -d: -f5`\" \ + pwdlset_t=\"`echo $row | cut -d: -f6`\" \ + gcos=\"`echo $row | cut -d: -f7`\" \ + home=\"`echo $row | cut -d: -f8`\" \ + shell=\"`echo $row | cut -d: -f9`\" smbpasswd.org_dir.`nisdefaults -d` +done diff --git a/source4/script/mknissmbpwdtbl.sh b/source4/script/mknissmbpwdtbl.sh new file mode 100755 index 0000000000..a9b34ff9a7 --- /dev/null +++ b/source4/script/mknissmbpwdtbl.sh @@ -0,0 +1,42 @@ +#!/bin/sh +# +# Copyright (C) 1998 Benny Holmgren +# +# Creates smbpasswd table and smb group in NIS+ +# + +nistbladm \ + -D access=og=rmcd,nw= -c \ + -s : smbpasswd_tbl \ + name=S,nogw=r \ + uid=S,nogw=r \ + user_rid=S,nogw=r \ + smb_grpid=,nw+r \ + group_rid=,nw+r \ + acb=,nw+r \ + \ + lmpwd=C,nw=,g=r,o=rm \ + ntpwd=C,nw=,g=r,o=rm \ + \ + logon_t=,nw+r \ + logoff_t=,nw+r \ + kick_t=,nw+r \ + pwdlset_t=,nw+r \ + pwdlchg_t=,nw+r \ + pwdmchg_t=,nw+r \ + \ + full_name=,nw+r \ + home_dir=,nw+r \ + dir_drive=,nw+r \ + logon_script=,nw+r \ + profile_path=,nw+r \ + acct_desc=,nw+r \ + workstations=,nw+r \ + \ + hours=,nw+r \ + smbpasswd.org_dir.`nisdefaults -d` + +nisgrpadm -c smb.`nisdefaults -d` + +nischgrp smb.`nisdefaults -d` smbpasswd.org_dir.`nisdefaults -d` + diff --git a/source4/script/mkproto.awk b/source4/script/mkproto.awk new file mode 100644 index 0000000000..999066ed7d --- /dev/null +++ b/source4/script/mkproto.awk @@ -0,0 +1,165 @@ +BEGIN { + inheader=0; +# use_ldap_define = 0; + current_file=""; + if (headername=="") { + headername="_PROTO_H_"; + } + + print "#ifndef",headername + print "#define",headername + print "" + print "/* This file is automatically generated with \"make proto\". DO NOT EDIT */" + print "" +} + +END { + print "" + print "#endif /* ",headername," */" +} + +{ + if (FILENAME!=current_file) { +# if (use_ldap_define) +# { +# print "#endif /* USE_LDAP */" +# use_ldap_define = 0; +# } + print "" + print "/* The following definitions come from",FILENAME," */" + print "" + current_file=FILENAME + } + if (inheader) { + if (match($0,"[)][ \t]*$")) { + inheader = 0; + printf "%s;\n",$0; + } else { + printf "%s\n",$0; + } + next; + } +} + +# special handling for code merge of TNG to head +/^#define OLD_NTDOMAIN 1/ { + printf "#if OLD_NTDOMAIN\n" +} +/^#undef OLD_NTDOMAIN/ { + printf "#endif\n" +} +/^#define NEW_NTDOMAIN 1/ { + printf "#if NEW_NTDOMAIN\n" +} +/^#undef NEW_NTDOMAIN/ { + printf "#endif\n" +} + +# we handle the loadparm.c fns separately + +/^FN_LOCAL_BOOL/ { + split($0,a,"[,()]") + printf "BOOL %s(int );\n", a[2] +} + +/^FN_LOCAL_LIST/ { + split($0,a,"[,()]") + printf "const char **%s(int );\n", a[2] +} + +/^FN_LOCAL_STRING/ { + split($0,a,"[,()]") + printf "char *%s(int );\n", a[2] +} + +/^FN_LOCAL_CONST_STRING/ { + split($0,a,"[,()]") + printf "const char *%s(int );\n", a[2] +} + +/^FN_LOCAL_INT/ { + split($0,a,"[,()]") + printf "int %s(int );\n", a[2] +} + +/^FN_LOCAL_CHAR/ { + split($0,a,"[,()]") + printf "char %s(int );\n", a[2] +} + +/^FN_GLOBAL_BOOL/ { + split($0,a,"[,()]") + printf "BOOL %s(void);\n", a[2] +} + +/^FN_GLOBAL_LIST/ { + split($0,a,"[,()]") + printf "const char **%s(void);\n", a[2] +} + +/^FN_GLOBAL_STRING/ { + split($0,a,"[,()]") + printf "char *%s(void);\n", a[2] +} + +/^FN_GLOBAL_CONST_STRING/ { + split($0,a,"[,()]") + printf "const char *%s(void);\n", a[2] +} + +/^FN_GLOBAL_INT/ { + split($0,a,"[,()]") + printf "int %s(void);\n", a[2] +} + +/^static|^extern/ || !/^[a-zA-Z]/ || /[;]/ { + next; +} + +# +# We have to split up the start +# matching as we now have so many start +# types that it can cause some versions +# of nawk/awk to choke and fail on +# the full match. JRA. +# + +{ + gotstart = 0; + if( $0 ~ /^const|^connection_struct|^pipes_struct|^smb_np_struct|^file_fd_struct|^files_struct|^connection_struct|^uid_t|^gid_t|^unsigned|^mode_t|^DIR|^user|^int|^pid_t|^ino_t|^off_t|^double/ ) { + gotstart = 1; + } + + if( $0 ~ /^vuser_key|^UNISTR2|^LOCAL_GRP|^DOMAIN_GRP|^SMB_STRUCT_DIRENT|^SEC_ACL|^SEC_DESC|^SEC_DESC_BUF|^DOM_SID|^RPC_HND_NODE|^BYTE/ ) { + gotstart = 1; + } + + if( $0 ~ /^ADS_STRUCT|^ADS_STATUS|^DATA_BLOB|^ASN1_DATA|^TDB_CONTEXT|^TDB_DATA|^smb_ucs2_t|^TALLOC_CTX|^hash_element|^NT_DEVICEMODE|^enum.*\(|^NT_USER_TOKEN|^SAM_ACCOUNT/ ) { + gotstart = 1; + } + + if( $0 ~ /^smb_iconv_t|^long|^char|^uint|^NTSTATUS|^WERROR|^CLI_POLICY_HND|^struct|^BOOL|^void|^time|^smb_shm_offset_t|^shm_offset_t|^FILE|^XFILE|^SMB_OFF_T|^size_t|^ssize_t|^SMB_BIG_UINT/ ) { + gotstart = 1; + } + + if( $0 ~ /^SAM_ACCT_INFO_NODE|^SMB_ACL_T|^ADS_MODLIST|^PyObject|^SORTED_TREE|^REGISTRY_HOOK|^REGISTRY_VALUE|^NTTIME|^DEVICEMODE/ ) { + gotstart = 1; + } + + if(!gotstart) { + next; + } +} + + +/[(].*[)][ \t]*$/ { + printf "%s;\n",$0; + next; +} + +/[(]/ { + inheader=1; + printf "%s\n",$0; + next; +} + diff --git a/source4/script/mkproto.sh b/source4/script/mkproto.sh new file mode 100644 index 0000000000..2bf96c9b41 --- /dev/null +++ b/source4/script/mkproto.sh @@ -0,0 +1,43 @@ +#! /bin/sh + +LANG=C; export LANG +LC_ALL=C; export LC_ALL +LC_COLLATE=C; export LC_COLLATE + +if [ $# -lt 3 ] +then + echo "Usage: $0 awk [-h headerdefine] outputheader proto_obj" + exit 1 +fi + +awk="$1" +shift + +if [ x"$1" = x-h ] +then + headeropt="-v headername=$2" + shift; shift; +else + headeropt="" +fi + +header="$1" +shift +headertmp="$header.$$.tmp~" + +proto_src="`echo $@ | tr ' ' '\n' | sed -e 's/\.o/\.c/g' | sort | uniq | egrep -v 'ubiqx/|wrapped'`" + +echo creating $header + +mkdir -p `dirname $header` + +${awk} $headeropt \ + -f script/mkproto.awk $proto_src > $headertmp + +if cmp -s $header $headertmp 2>/dev/null +then + echo "$header unchanged" + rm $headertmp +else + mv $headertmp $header +fi diff --git a/source4/script/mksmbpasswd.sh b/source4/script/mksmbpasswd.sh new file mode 100644 index 0000000000..854e1bd1b5 --- /dev/null +++ b/source4/script/mksmbpasswd.sh @@ -0,0 +1,6 @@ +#!/bin/sh +awk 'BEGIN {FS=":" + printf("#\n# SMB password file.\n#\n") + } +{ printf( "%s:%s:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:[U ]:LCT-00000000:%s\n", $1, $3, $5) } +' diff --git a/source4/script/revert.sh b/source4/script/revert.sh new file mode 100644 index 0000000000..8df5fd2fbd --- /dev/null +++ b/source4/script/revert.sh @@ -0,0 +1,18 @@ +#!/bin/sh +BINDIR=$1 +shift + +for p in $*; do + p2=`basename $p` + if [ -f $BINDIR/$p2.old ]; then + echo Restoring $BINDIR/$p2.old + mv $BINDIR/$p2 $BINDIR/$p2.new + mv $BINDIR/$p2.old $BINDIR/$p2 + rm -f $BINDIR/$p2.new + else + echo Not restoring $p + fi +done + +exit 0 + diff --git a/source4/script/scancvslog.pl b/source4/script/scancvslog.pl new file mode 100755 index 0000000000..c39f9111c1 --- /dev/null +++ b/source4/script/scancvslog.pl @@ -0,0 +1,112 @@ +#!/usr/bin/perl +require"timelocal.pl"; + +# +# usage scancvslog.pl logfile starttime tag +# +# this will extract all entries from the specified cvs log file +# that have a date later than or equal to starttime and a tag +# value of tag. If starttime is not specified, all entries are +# extracted. If tag is not specified then entries for all +# branches are extracted. starttime must be specified as +# "monthname day, year" +# +# Example to extract all entries for SAMBA_2_2 branch from the +# log file named cvs.log +# +# scancvslog.pl cvs.log "" SAMBA_2_2 +# +# +# To extract all log entries after Jan 10, 1999 (Note month name +# must be spelled out completely). +# +# scancvslog.pl cvs.log "January 10, 1999" +# + +open(INFILE,@ARGV[0]) || die "Unable to open @ARGV[0]\n"; + +%Monthnum = ( + "January", 0, + "February", 1, + "March", 2, + "April", 3, + "May", 4, + "June", 5, + "July", 6, + "August", 7, + "September", 8, + "October", 9, + "November", 10, + "December", 11, + "Jan", 0, + "Feb", 1, + "Mar", 2, + "Apr", 3, + "May", 4, + "Jun", 5, + "Jul", 6, + "Aug", 7, + "Sep", 8, + "Oct", 9, + "Nov", 10, + "Dec", 11 +); + +$Starttime = (@ARGV[1]) ? &make_time(@ARGV[1]) : 0; +$Tagvalue = @ARGV[2]; + +while (&get_entry) { + $_=$Entry[0]; +# get rid of extra white space + s/\s+/ /g; +# get rid of any time string in date + s/ \d\d:\d\d:\d\d/,/; + s/^Date:\s*\w*\s*(\w*)\s*(\w*),\s*(\w*).*/$1 $2 $3/; + $Testtime = &make_time($_); + $Testtag = &get_tag; + if (($Testtime >= $Starttime) && ($Tagvalue eq $Testtag)) { + print join("\n",@Entry),"\n"; + } +} +close(INFILE); + +sub make_time { + $_ = @_[0]; + s/,//; + ($month, $day, $year) = split(" ",$_); + if (($year < 1900)||($day < 1)||($day > 31)||not length($Monthnum{$month})) { + print "Bad date format @_[0]\n"; + print "Date needs to be specified as \"Monthname day, year\"\n"; + print "eg: \"January 10, 1999\"\n"; + exit 1; + } + $year = ($year == 19100) ? 2000 : $year; + $month = $Monthnum{$month}; + $Mytime=&timelocal((0,0,0,$day,$month,$year)); +} + +sub get_tag { + @Mytag = grep (/Tag:/,@Entry); + $_ = @Mytag[0]; + s/^.*Tag:\s*(\w*).*/$1/; + return $_; +} + +sub get_entry { + @Entry=(); + if (not eof(INFILE)) { + while (not eof(INFILE)) { + $_ = <INFILE>; + chomp $_; + next if (not ($_)); + if (/^\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/) { + next if ($#Entry == -1); + push(Entry,$_); + return @Entry; + } else { + push(Entry,$_); + } + } + } + return @Entry; +} diff --git a/source4/script/smbtar b/source4/script/smbtar new file mode 100644 index 0000000000..f062cba9f0 --- /dev/null +++ b/source4/script/smbtar @@ -0,0 +1,165 @@ +#!/bin/sh +# +# smbtar script - front end to smbclient +# +# Authors: Martin.Kraemer <Martin.Kraemer@mch.sni.de> +# and Ricky Poulten (ricky@logcam.co.uk) +# +# (May need to change shell to ksh for HPUX or OSF for better getopts) +# +# sandy nov 3 '98 added -a flag +# +# Richard Sharpe, added -c 'tarmode full' so that we back up all files to +# fix a bug in clitar when a patch was added to stop system and hidden files +# being backed up. + +case $0 in + # when called by absolute path, assume smbclient is in the same directory + /*) + SMBCLIENT="`dirname $0`/smbclient";; + *) # you may need to edit this to show where your smbclient is + SMBCLIENT="smbclient";; +esac + +# These are the default values. You could fill them in if you know what +# you're doing, but beware: better not store a plain text password! +server="" +service="backup" # Default: a service called "backup" +password="" +username=$LOGNAME # Default: same user name as in *nix +verbose="2>/dev/null" # Default: no echo to stdout +log="-d 2" +newer="" +newerarg="" +blocksize="" +blocksizearg="" +clientargs="-c 'tarmode full'" +tarcmd="c" +tarargs="" +cdcmd="\\" +tapefile=${TAPE-tar.out} + +Usage(){ + ex=$1 + shift +echo >&2 "Usage: `basename $0` [<options>] [<include/exclude files>] +Function: backup/restore a Windows PC directories to a local tape file +Options: (Description) (Default) + -r Restore from tape file to PC Save from PC to tapefile + -i Incremental mode Full backup mode + -a Reset archive bit mode Don't reset archive bit + -v Verbose mode: echo command Don't echo anything + -s <server> Specify PC Server $server + -p <password> Specify PC Password $password + -x <share> Specify PC Share $service + -X Exclude mode Include + -N <newer> File for date comparison `set -- $newer; echo $2` + -b <blocksize> Specify tape's blocksize `set -- $blocksize; echo $2` + -d <dir> Specify a directory in share $cdcmd + -l <log> Specify a Samba Log Level `set -- $log; echo $2` + -u <user> Specify User Name $username + -t <tape> Specify Tape device $tapefile +" + echo >&2 "$@" + exit $ex +} + +# echo Params count: $# + +# DEC OSF AKA Digital UNIX does not seem to return a value in OPTIND if +# there are no command line params, so protect us against that ... +if [ $# = 0 ]; then + + Usage 2 "Please enter a command line parameter!" + +fi + +while getopts riavl:b:d:N:s:p:x:u:Xt: c; do + case $c in + r) # [r]estore to Windows (instead of the default "Save from Windows") + tarcmd="x" + ;; + i) # [i]ncremental + tarargs=${tarargs}ga + clientargs="-c 'tarmode inc'" + ;; + a) # [a]rchive + tarargs=${tarargs}a + ;; + l) # specify [l]og file + log="-d $OPTARG" + case "$OPTARG" in + [0-9]*) ;; + *) echo >&2 "$0: Error, log level not numeric: -l $OPTARG" + exit 1 + esac + ;; + d) # specify [d]irectory to change to in server's share + cdcmd="$OPTARG" + ;; + N) # compare with a file, test if [n]ewer + if [ -f $OPTARG ]; then + newer=$OPTARG + newerarg="N" + else + echo >&2 $0: Warning, $OPTARG not found + fi + ;; + X) # Add exclude flag + tarargs=${tarargs}X + ;; + s) # specify [s]erver's share to connect to - this MUST be given. + server="$OPTARG" + ;; + b) # specify [b]locksize + blocksize="$OPTARG" + case "$OPTARG" in + [0-9]*) ;; + *) echo >&2 "$0: Error, block size not numeric: -b $OPTARG" + exit 1 + esac + blocksizearg="b" + ;; + p) # specify [p]assword to use + password="$OPTARG" + ;; + x) # specify windows [s]hare to use + service="$OPTARG" + ;; + t) # specify [t]apefile on local host + tapefile="$OPTARG" + ;; + u) # specify [u]sername for connection + username="$OPTARG" + ;; + v) # be [v]erbose and display what's going on + verbose="" + ;; + '?') # any other switch + Usage 2 "Invalid switch specified - abort." + ;; + esac +done + +shift `expr $OPTIND - 1` + +if [ "$server" = "" ] || [ "$service" = "" ]; then + Usage 1 "No server or no service specified - abort." +fi + +# if the -v switch is set, the echo the current parameters +if [ -z "$verbose" ]; then + echo "server is $server" +# echo "share is $service" + echo "share is $service\\$cdcmd" + echo "tar args is $tarargs" +# echo "password is $password" # passwords should never be sent to screen + echo "tape is $tapefile" + echo "blocksize is $blocksize" +fi + +tarargs=${tarargs}${blocksizearg}${newerarg} + +eval $SMBCLIENT "'\\\\$server\\$service'" "'$password'" -U "'$username'" \ +-E -N $log -D "'$cdcmd'" ${clientargs} \ +-T${tarcmd}${tarargs} $blocksize $newer $tapefile '${1+"$@"}' $verbose diff --git a/source4/script/uninstallbin.sh b/source4/script/uninstallbin.sh new file mode 100644 index 0000000000..a8bbdea7af --- /dev/null +++ b/source4/script/uninstallbin.sh @@ -0,0 +1,42 @@ +#!/bin/sh +#4 July 96 Dan.Shearer@UniSA.edu.au + +INSTALLPERMS=$1 +BASEDIR=$2 +BINDIR=$3 +LIBDIR=$4 +VARDIR=$5 +shift +shift +shift +shift +shift + +if [ ! -d $BINDIR ]; then + echo Directory $BINDIR does not exist! + echo Do a "make installbin" or "make install" first. + exit 1 +fi + +for p in $*; do + p2=`basename $p` + if [ -f $BINDIR/$p2 ]; then + echo Removing $BINDIR/$p2 + rm -f $BINDIR/$p2 + if [ -f $BINDIR/$p2 ]; then + echo Cannot remove $BINDIR/$p2 ... does $USER have privileges? + fi + fi +done + + +cat << EOF +====================================================================== +The binaries have been uninstalled. You may restore the binaries using +the command "make installbin" or "make install" to install binaries, +man pages, modules and shell scripts. You can restore a previous +version of the binaries (if there were any) using "make revert". +====================================================================== +EOF + +exit 0 diff --git a/source4/script/uninstallman.sh b/source4/script/uninstallman.sh new file mode 100644 index 0000000000..3126709831 --- /dev/null +++ b/source4/script/uninstallman.sh @@ -0,0 +1,37 @@ +#!/bin/sh +#4 July 96 Dan.Shearer@UniSA.edu.au +# +# 13 Aug 2001 Rafal Szczesniak <mimir@spin.ict.pwr.wroc.pl> +# modified to accomodate international man pages (inspired +# by Japanese edition's approach) + + +MANDIR=$1 +SRCDIR=$2 +langs=$3 + +for lang in $langs; do + echo Uninstalling \"$lang\" man pages from $MANDIR/$lang + + for sect in 1 5 7 8 ; do + for m in $MANDIR/$lang/man$sect ; do + for s in $SRCDIR/../docs/manpages/$lang/*$sect; do + FNAME=$m/`basename $s` + if test -f $FNAME; then + echo Deleting $FNAME + rm -f $FNAME + test -f $FNAME && echo Cannot remove $FNAME... does $USER have privileges? + fi + done + done + done +done + +cat << EOF +====================================================================== +The man pages have been uninstalled. You may install them again using +the command "make installman" or make "install" to install binaries, +man pages and shell scripts. +====================================================================== +EOF +exit 0 diff --git a/source4/script/uninstallmodules.sh b/source4/script/uninstallmodules.sh new file mode 100644 index 0000000000..30582a39fa --- /dev/null +++ b/source4/script/uninstallmodules.sh @@ -0,0 +1,37 @@ +#!/bin/sh +#4 July 96 Dan.Shearer@UniSA.edu.au + +INSTALLPERMS=$1 +BASEDIR=$2 +LIBDIR=$3 +shift +shift +shift + +if [ ! -d $LIBDIR ]; then + echo Directory $LIBDIR does not exist! + echo Do a "make installmodules" or "make install" first. + exit 1 +fi + +for p in $*; do + p2=`basename $p` + if [ -f $LIBDIR/$p2 ]; then + echo Removing $LIBDIR/$p2 + rm -f $LIBDIR/$p2 + if [ -f $LIBDIR/$p2 ]; then + echo Cannot remove $LIBDIR/$p2 ... does $USER have privileges? + fi + fi +done + + +cat << EOF +====================================================================== +The modules have been uninstalled. You may restore the modules using +the command "make installmodules" or "make install" to install +binaries, modules, man pages and shell scripts. +====================================================================== +EOF + +exit 0 diff --git a/source4/script/uninstallscripts.sh b/source4/script/uninstallscripts.sh new file mode 100644 index 0000000000..13104acedd --- /dev/null +++ b/source4/script/uninstallscripts.sh @@ -0,0 +1,36 @@ +#!/bin/sh +# 5 July 96 Dan.Shearer@UniSA.Edu.Au - almost identical to uninstallbin.sh + +INSTALLPERMS=$1 +BINDIR=$2 + +shift +shift + +if [ ! -d $BINDIR ]; then + echo Directory $BINDIR does not exist! + echo Do a "make installscripts" or "make install" first. + exit 1 +fi + +for p in $*; do + p2=`basename $p` + if [ -f $BINDIR/$p2 ]; then + echo Removing $BINDIR/$p2 + rm -f $BINDIR/$p2 + if [ -f $BINDIR/$p2 ]; then + echo Cannot remove $BINDIR/$p2 ... does $USER have privileges? + fi + fi +done + +cat << EOF +====================================================================== +The scripts have been uninstalled. You may reinstall them using +the command "make installscripts" or "make install" to install binaries, +man pages and shell scripts. You may recover a previous version (if any +with "make revert". +====================================================================== +EOF + +exit 0 diff --git a/source4/script/updatesmbpasswd.sh b/source4/script/updatesmbpasswd.sh new file mode 100644 index 0000000000..1d7e0d7332 --- /dev/null +++ b/source4/script/updatesmbpasswd.sh @@ -0,0 +1,14 @@ +#!/bin/sh +nawk 'BEGIN {FS=":"} +{ + if( $0 ~ "^#" ) { + print $0 + } else if( (length($4) == 32) && (($4 ~ "^[0-9A-F]*$") || ($4 ~ "^[X]*$") || ( $4 ~ "^[*]*$"))) { + print $0 + } else { + printf( "%s:%s:%s:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:", $1, $2, $3); + for(i = 4; i <= NF; i++) + printf("%s:", $i) + printf("\n") + } +}' |