summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>1999-12-13 13:35:20 +0000
committerAndrew Tridgell <tridge@samba.org>1999-12-13 13:35:20 +0000
commitd7b208786590b5a28618590172b8d523627dda09 (patch)
treee011be5c2c2cbb61c2011bce741613556fcf116a /examples
parent453a822a76780063dff23526c35408866d0c0154 (diff)
downloadsamba-d7b208786590b5a28618590172b8d523627dda09.tar.gz
2nd phase of head branch sync with SAMBA_2_0 - this delets all the files that were in the head branch but weren't in SAMBA_2_0
Diffstat (limited to 'examples')
-rw-r--r--examples/autofs/mount-smb.doc65
-rw-r--r--examples/autofs/mount.smb441
-rw-r--r--examples/rpcclient/README11
-rw-r--r--examples/rpcclient/ntsd.c259
4 files changed, 0 insertions, 776 deletions
diff --git a/examples/autofs/mount-smb.doc b/examples/autofs/mount-smb.doc
deleted file mode 100644
index 7eee74fce0d..00000000000
--- a/examples/autofs/mount-smb.doc
+++ /dev/null
@@ -1,65 +0,0 @@
-Date: Tue, 07 Apr 1998
-Contributor: Christoph L. Spiel <Christoph_Spiel@physik.tu-muenchen.de>
-Organization: Munich Institute of Technology, Institute E10
-Subject: WISHES:LINUX:smbmount
-===============================================================================
-Machine Arch: i386
-Machine OS: linux
-Kernel: 2.1.85
-Samba Version: Version 1.9.18p3
-Mount Version: 2.7i
-Autofs Version: 0.3.14
-
-
-Hi SAMBA developers!
-
-I have written a shell script that marries smbmount and mount
-on a Linux-machine with a 2.1.55+ kernel (i.e., a newer developper
-kernel. Especially it makes smbmount compatible
-with autofs! Now, You (when root :-) can say
- mount -t smb /win-machine/my-share /mntpt
-Concerning the management of the user/password-pairs I have already
-made a step in the right direction, but there is still a lot of
-brain-work to do :-(
-
-The primary problem with the Win passwords
-is that they are under user-control, and not under admin-control
-as the Linux passwords are. Therfore, I give every SAMBA user
-a
- ~/smb-pass
-file where she can manage her usernames and passwords herself.
-The fundamental mount-tables /etc/fstab and /etc/auto.* only
-list the mount-point and the respective options. The userīs
-password file is adressed via the uuname=<user_name>-option.
-
-An important "side-effect" is that the password file need not to
-be word-readable. In fact my script tests for user-only rights of
-this file to close this potential security-hole.
-
-The script mount.smb has to be installed in /sbin and given mode 755.
-No suid is necessary! I attached an automount table that is currently
-in use on my machine. A userīs password file looks like this:
-
-$ cat ~/smb-pass
-supra:/cspiel cspiel secret
-helium:/c cspiel sesame
-^ ^ ^
-| | +- password
-| +- username
-+- share-name as in fundamental mount-table.
-
-It would be nice, if someone else tests my script. Maybe, You have
-already found a better solution than mine. If You find it useful,
-I would be glad to donate it to the SAMBA-project.
-
-BUGS:
-(1) There is no documentation yet. (Yes, I consider this a bug!)
-(2) When used with autofs the automounter overruns mount.smb.
- This means when accessing an automounted share for the 1st time
- You may get an empty directory. Retrying several times will
- cause the mount to complete successfully.
-
-
-Best,
- Christoph Spiel
-
diff --git a/examples/autofs/mount.smb b/examples/autofs/mount.smb
deleted file mode 100644
index 76f1a596e35..00000000000
--- a/examples/autofs/mount.smb
+++ /dev/null
@@ -1,441 +0,0 @@
-#!/bin/sh -x
-
-
-# name: mount.smb -- interface between mount and smbmount
-# author: Ch. L. Spiel (cspiel@physik.tu-muenchen.de)
-# $Id: mount.smb,v 1.1 1998/04/13 12:31:10 jht Exp $
-
-# bash version: 1.14.7(1)
-# mount version: 2.7i
-# smbmount version: 1.9.18p3
-
-
-myname=`basename $0`
-passwd_filename="smb-pass" # name of user smb-password file
-lock_file="/var/lock/$myname"
-log_file="/tmp/mount.smb.log"
-
-PATH=/usr/local/samba/bin:/usr/bin:/bin
-
-# check for an existing lock-file quickly(!)
-if [ -e "$lock_file" ]; then
- # exit, but donīt touch lock-file
- exit 0
-fi
-# set up new lock-file
-echo > $lock_file
-
-# initialise log-file
-echo "logging of $myname started at `date`" > $log_file
-chmod --silent 600 $log_file
-echo "called with: $@" >> $log_file
-exec >> $log_file 2>&1
-
-
-
-# set default and initial values
-verbose=false # be silent
-fake=false # really do the mount
-fmode="-f 600" # default file mode
-dmode="-d 700" # default dir mode
-
-#uid="-u `id | sed 's/^uid=\([0-9]*\).*$/\1/'`"
-uid="-u 0"
-#gid="-g `id | sed 's/^.*gid=\([0-9]*\).*$/\1/'`"
-gid="-g 0"
-
-
-#
-# functions
-#
-
-# exitproc(int exit_code)
-function exit_proc
-{
- if [ -n "$lock_file" ]; then
- # remove current lock-file
- rm "$lock_file"
- fi
- # update log-file
- echo "" >> $log_file
- echo "$mynameīs return value is $1." >> $log_file
- echo "logging of $myname ended at `date`." >> $log_file
- # done.
- exit $1
-}
-
-
-# split_arg(arg)
-# arg ::= id '=' val
-# set id and val on return
-function split_arg
-{
- id="$1"
- val="$2"
- extra="$3"
-} # end of split_arg
-
-
-# split_passwdline(uline)
-function split_passwdline
-{
- user_name=$1
- real_password=$2
- user_id=$3
- group_id=$4
- full_name=$5
- home_dir=$6
- shell_name=$7
-}
-
-
-# get_homedir(username)
-function get_homedir
-{
- local temp_ifs
-
- temp_ifs="$IFS"
- uline=`grep "^$1" /etc/passwd`
- if [ -z "$uline" ]; then
- echo "$myname: unknown user \"$1\""
- exit_proc 1
- fi
- IFS=":"
- split_passwdline $uline
- if [ -z "$home_dir" ]; then
- echo "$myname: user \"$1\" has no home directory"
- exit_proc 1
- fi
- echo "$home_dir"
- IFS="$temp_ifs"
-}
-
-
-# get_uid(username)
-function get_uid
-{
- local temp_ifs
-
- temp_ifs="$IFS"
- uline=`grep "^$1" /etc/passwd`
- if [ -z "$uline" ]; then
- echo "$myname: unknown user \"$1\""
- exit_proc 1
- fi
- IFS=":"
- split_passwdline $uline
- echo "$user_id"
- IFS="$temp_ifs"
-}
-
-
-# get_gid(username)
-function get_gid
-{
- local temp_ifs
-
- temp_ifs="$IFS"
- uline=`grep "^$1" /etc/passwd`
- if [ -z "$uline" ]; then
- echo "$myname: unknown user \"$1\""
- exit_proc 1
- fi
- IFS=":"
- split_passwdline $uline
- echo "$group_id"
- IFS="$temp_ifs"
-}
-
-
-# read_passwd_file(sharename)
-function read_passwd_file
-{
- local pwd_filename pwd_entry temp_ifs share_name fmod
-
- pwd_filename=`get_homedir $uuname`/$passwd_filename
- # use uid and gid of userīs /etc/password entry
- uid="-u `get_uid $uuname`"
- gid="-g `get_gid $uuname`"
- # check existence of password file
- if [ ! -f "$pwd_filename" -o ! -r "$pwd_filename" ]; then
- echo "$myname: cannot read from user password file \"$pwd_filename\""
- exit_proc 1
- fi
- # check file permissions
- for f in $pwd_filename{,~,%,.BAK,.bak,.new,.old,.orig,.sav}; do
- if [ ! -f $f ]; then continue; fi
- /bin/ls -l $f | grep -q -- "^-r\(w\|-\)------"
- if [ $? = 1 ]; then
- echo "$myname: Found security hole: mode of file \"$f\""
- echo "$myname: Password file must have permission 400 or 600."
- echo "$myname: Please fix the fileīs mode."
- exit_proc 1
- fi
- done
-
- share_name="$1" # sharename in smb-format!
- pwd_entry=`grep -v '^#' "$pwd_filename" | grep -i "^$share_name"`
- if [ -z "$pwd_entry" ]; then
- # try uni*-like sharename
- share_name=`echo $share_name | sed -e 's,^//,,' -e 's,/,:/,'`
- pwd_entry=`grep -v '^#' "$pwd_filename" | grep -i "^$share_name"`
- fi
- if [ -z "$pwd_entry" ]; then
- # sharename was not found in userīs password file
- echo "$myname: cannot authentify share named \"$1\" via file \"$pwd_filename\""
- exit_proc 1
- fi
-
- # pwd_entry has the form:
- # sharename username password
- temp_ifs="$IFS"
- IFS=" " # <tab> and <space>
- split_arg $pwd_entry
- options="$options -U $val"
- password="$extra"
- IFS="$temp_ifs"
-}
-
-
-# process_options(opt1, opt2, ..., optN)
-function process_options
-{
- local temp_ifs
-
- for j; do
- temp_ifs="$IFS" # save current internal-field separator
- IFS="=" # set new separator
- split_arg $j # split argument into identifier and value
- IFS="$temp_ifs" # reset old separator
- case "$id" in
- port)
- options="$options -p $val"
- ;;
- debug)
- options="$options -d $val"
- ;;
- log)
- options="$options -l $val"
- ;;
- nbname)
- options="$options -n $val"
- ;;
- nopwd)
- options="$options -N"
- ;;
- maxproto)
- options="$options -m $val"
- ;;
- ip)
- options="$options -I $val"
- ;;
- uname)
- options="$options -U $val"
- ;;
- wrkgrp)
- options="$options -W $val"
- ;;
- term)
- options="$options -t $val"
- ;;
- sdir)
- options="$options -D $val"
- ;;
- pwd)
- # DO NOT USE THIS OPTION! It is a severe scurity hole.
- password="$val"
- ;;
- uuname)
- # consult userīs smb-password file
- uuname="$val" # uni* user name
- read_passwd_file "$server_service"
- ;;
-
- # ignored options
- async)
- # do nothing
- ;;
- atime)
- # do nothing
- ;;
- auto)
- # do nothing
- ;;
- defaults)
- # do nothing
- ;;
- dev)
- # do nothing
- ;;
- exec)
- # do nothing
- ;;
- noatime)
- # do nothing
- ;;
- noauto)
- # do nothing
- ;;
- nodev)
- # do nothing
- ;;
- noexec)
- # do nothing
- ;;
- nosuid)
- # do nothing
- ;;
- nouser)
- # do nothing
- ;;
- ro)
- # do nothing
- ;;
- rw)
- # do nothing
- ;;
- suid)
- # do nothing
- ;;
- sync)
- # do nothing
- ;;
- user)
- # do nothing
- ;;
-
- # fs options
- fmod)
- fmode="-f $val"
- ;;
- dmod)
- dmode="-d $val"
- ;;
- uid)
- uid="-u $val"
- ;;
- gid)
- gid="-g $val"
- ;;
-
- # fallthrough
- *)
- echo "$myname: unrecognized option $id"
- exit_proc 1
- ;;
- esac
- done
-} # end of split_options
-
-
-
-#
-# main
-#
-
-
-
-if [ "$verbose" != "false" ]; then
- # show how we have been called
- echo "$myname: $*"
-fi
-
-# some checks of the input parameters
-if [ "$#" -lt 2 ]; then
- echo "$myname: need at least service and mountpoint"
- exit_proc 1
-fi
-
-if `echo "$2" | grep -vq "^/"`; then
- echo "$myname: mount point must be an absolut path"
- exit_proc 1
-fi
-
-
-# copy arguments
-if `echo "$1" | grep -q ":/"`; then
- # non--standard format, i.e., server:/service
- server_service=`echo "//$1" | sed -e "sx:/x/x"`
-else
- # standard format, i.e, //server/service
- server_service="$1"
-fi
-mntpt="$2"
-
-# copy options
-shift 2 # skip arguments: //server/service and /mnt-point
-for i; do
- case "$i" in
- -f | --fake)
- fake=true
- ;;
- -h | --help)
- echo "usage: mount.smb service [password] mountpoint [options]"
- exit_proc 0
- ;;
- -v | --verbose)
- verbose=true
- ;;
- -V | --version)
- echo "$myname: mount.smb-0.1.0"
- exit_proc 0
- ;;
- -o)
- shift # skip leading -o
- temp_ifs="$IFS" # save current internal-field separator
- IFS="," # set new separator
- process_options $*
- IFS="$temp_ifs" # reset old separator
- break # mount places options at the end -> we are done
- ;;
- *)
- echo "$myname: unrecognized option $i"
- exit_proc 1
- ;;
- esac
- shift
-done
-IFS=' '
-
-
-#
-# be careful...
-#
-
-
-# nmblookup server: is node up and running?
-srv=`echo $server_service | sed 's,^//\(.*\)/.*$,\1,'` # serverīs name
-nmblookup "$srv" | grep -q "failed to find name"
-if [ "$?" = 0 ]; then
- echo "$myname: failed to find server \"$srv\"."
- exit_proc 1
-fi
-
-
-#
-# perform mount
-#
-
-
-fs_options="$fmode $dmode $uid $gid" # all options concerning the mounted fs
-if [ "$verbose" = "true" ]; then
- # display what we would do. Do not show the password, only show "xxx".
- echo -n "smbmount $server_service "
- if [ -n "$password" ]; then # password is set
- echo -n "xxx " # ... but we donīt show it ;-)
- fi
- echo "-c \"mount $mntpt $fs_options\" $options"
-#else
- # supress further messages
-# exec > /dev/null 2>&1
-#:
-fi
-
-if [ "$fake" != "true" ]; then
- smbmount $server_service $password -c "mount $mntpt $fs_options" $options
- echo "smbmountīs exit code was $?."
-fi
-
-# clean up and exit
-exit_proc 0
-
diff --git a/examples/rpcclient/README b/examples/rpcclient/README
deleted file mode 100644
index bdff5821a75..00000000000
--- a/examples/rpcclient/README
+++ /dev/null
@@ -1,11 +0,0 @@
-This directory contains example programs and scripts that have been written by
-Samba rpcclient administrators and users. You may, or may not, find
-some of them useful. They have been submitted here for use at your own
-risk, and no responsibility is accepted for their use or mis-use.
-
-Program Author Purpose
-------- ------ -------
-
-ntsd.c David Bannon. Pings several workstations and shuts them down.
- Used by David in a lab environment to kick students
- off workstations from a cron job.
diff --git a/examples/rpcclient/ntsd.c b/examples/rpcclient/ntsd.c
deleted file mode 100644
index 37976edaa5e..00000000000
--- a/examples/rpcclient/ntsd.c
+++ /dev/null
@@ -1,259 +0,0 @@
-/* This is an experiemental programme to shutdown a group of NTws in a
- Samba domain via rpcclient.
-
- Copyright (c) David Bannon 1999
- David Bannon, D.Bannon@latrobe.edu.au, 4th November, 1999
-
- Full permission is granted to use this code (for what that is worth) in
- any way you wish, strictly at your own risk.
-
- I use it from a cron a job to close a computer lab down at 5:00 pm.
-
- It has some serious security implications, make sure you understand
- them before using this code !
-
- If you find a way to make this 'power down' a machine that is set up to
- do power down correctly please let me know !!
-
- Machines to be shutdown must be members of a samba (or NT) domain.
- You are going to have to offer your domain admin user name/password
- (see below).
-
- As you probably don't want your domain admin password appearing in the
- crontab file or popping up in a 'ps' list, it can be encrypted and the
- programme will tell you what it should look like. i.e :
-
- [root@bclab shutdown]# ./ntsd -e
- Domain Admin User name :dbannon
- Domain Admin Password
- Use the string between [] after a -p : [1HCeTcXqOfo7R[hg]
- [root@bclab shutdown]#
-
- Now a crontab entry would look like this :
-
- 00 17 * * 1-5 /usr/local/sbin/ntsd -p'1HCeTcXqOfo7R[hg' -a
-
- The -p indicates passwd (actually user name and password) and the
- -a says shutdown all machines. Note that the password string must
- have inverted commas around it so the shell does not try and expand
- any special charachers that it is likely to contain.
-
- Security Alert !!
- The encryption is pretty weak and its reversable ! Change the key
- strings, compile and change the key strings again ! You don't need
- to remember the key but if you leave the unchanged source around
- someone may use it to reverse the encryption. The Keys are in lumps
- to stop someone doing a 'cat ntsd' and seeing the key string.
- (yeah, I know its not very clever, but they should not be able to
- read the binary or your crontab anyway)
-
- Ping
- I ping the target machines before trying to shut them down, you
- dont't need to, just let rpcclient time out. If you want to ping
- first (because its nicer !) you need :
- 1. First element of IP name should be the netbios name. (makes sense)
- 2. If the server you will run the cron job from does not have the
- same default domain name as machines being shutdown then you will
- need to define USE_DOMAIN and put in appropriate ip domain info.
- This code does ping, get busy with vi if you don't want to.
-
- Machine Names
- For this system to be practical, the machine names must be in some
- sort of sequence, ie bclab1, bclab2, bclab3, not more creative like
- grumpy, dopey, sneezy. See the code in main() to see how the names
- are built.
-
- Configuration
-
- Machine Names
- If you have used a naming scheme like mine then you may need to
- change only LASTMACHINE and PREFIX, otherwise look at main().
-
- Binary locations.
- We need to find the rpcclient and ping binaries. The values below
- are typical. Better check first.
-
- Compile
- Known to compile cleanly on linux (RH5.0 - RH6.1) and DEC 4.0. Does
- not do anything fancy so should compile on most systems easily
- enough.
-
- Install
- Rename the binary (ie ntsd) and put it somewhere safe. It should
- be rwx root only. Comes up with basic help if run without command
- line switch, prompts for admin user name and password if used
- without the -p switch.
- (Typically)Put entry in your crontab (crontab -e) and watch the
- fun. Remember, it does not keep them shutdown, try an entry every
- 5 minutes for a while (or until door is locked).
-*/
-
-
-#include<stdio.h>
-#include<stdlib.h>
-#include<unistd.h>
-#include<pwd.h>
-
-#define PING "/bin/ping"
-#define RPCCLIENT "/usr/local/samba/bin/rpcclient"
-
-
-#define LASTMACHINE 14 /* ie, scans bclab1 through to bclab14 */
-#define PREFIX "bclab"
-
-/* #define USE_DOMAIN Only if you need full ip name to ping machines */
-
-#ifdef USE_DOMAIN
-#define DOMAIN ".biochem.latrobe.edu.au" /* required by ping, possibly.
- */
-#endif
-
-#define KEY1 "Please"
-#define KEY2 "don't leave"
-#define KEY3 "this"
-#define KEY4 "as it is"
-#define KEY5 "here"
-#define KEY6 "silly."
-
-
-int Shutdown(char *machine, char *PassWord) {
- char Buff[128], *Ptr;
- int Res;
- /* printf("Shutting down %s\n", machine); */
- sprintf(Buff, "/bin/ping -c 1 -q %s > /dev/null", machine);
- Res = system(Buff);
- if (Res == 0) { /* its turned on */
- Ptr = machine;
- /* first 'word' in ip name = netbios name, get rid of rest */
- while (*++Ptr != 0) if (*Ptr == '.') *Ptr = 0;
- printf("Shutting down %s\n", machine);
- sprintf(Buff, "%s -c shutdown -U%s -S %s", RPCCLIENT, PassWord,
-machine);
- system(Buff);
- }
-}
-
-int Usage(char *prog) {
- printf("Programme to shutdown NTs in domain.\n");
- printf("Normally called from cron (using encrypted passwd, see -e and
--p).\n");
- printf("Usage \n");
- printf(" -a shutdown all machines %s1 to %s%d. \n",
- PREFIX, PREFIX, LASTMACHINE);
- printf(" -m machine shutdown [machine] (might need full ip
-name).\n");
- printf(" -e tell me my encrypted name and password to
-use with -p.\n");
- printf(" -p'pw_string' use encrypted name & password as given by
--e.\n");
- printf(" You must have single inverted commas around
-the pw string !");
- printf(" -h help, give this message.\n");
- printf("Typical cron line : 00 17 * * 1-5 /usr/local/sbin/ntsd
--p1HCeTcXqOfo7R[hg -a\n");
- printf(" David Bannon,
-Nov 1999\n");
- exit(0);
-}
-
-int GetPassWord(char *Passwd) {
- char *ptr, *p;
- char User[128];
- printf("Domain Admin User name :");
- fgets(User, 127, stdin);
- if (strlen(User) < 3) {
- printf("Short user name, exiting.\n");
- exit(1);
- }
- p = User;
- while (*p != '\n') p++; /* get rid of newline */
- *p = 0;
- ptr = getpass("Domain Admin Password ");
- if (strlen(ptr) < 3) {
- printf("Short password, exiting.\n");
- exit(1);
- }
- strcpy(Passwd, User); /* do this with sprintf */
- strcat(Passwd, "%");
- strcat(Passwd, ptr);
- *ptr = 0; /* clean up system buffer */
- return 0;
-}
-
-int Encrypt(char *InPass) {
- char Pass[128], Enc[128];
- int Temp;
- char *Hash;
- int Offset = 0;
- Hash = malloc(256);
- /* so it a bit harder than just 'cat ntsd' */
- sprintf(Hash, "%s%s%s%s%s%s", KEY4, KEY3, KEY2, KEY5, KEY1, KEY6);
- if (InPass == 0) {
- GetPassWord(Pass); /* may not return */
- while (*(Pass + Offset) != 0) {
- Temp = *(Pass + Offset) + *(Hash + Offset) - ' ';
- if (Temp > '~') Temp = Temp - 95;
- *(Pass+Offset++) = Temp;
- }
- printf("Use the string between [] after a -p : ['%s']\n", Pass);
- exit(0);
- } else {
- while (*(InPass + Offset) != 0) {
- Temp = *(InPass + Offset) - *(Hash + Offset) + ' ';
- if (Temp < ' ') Temp = Temp + 95;
- *(InPass+Offset++) = Temp;
- }
- }
- free(Hash);
- return 0;
-}
-
-int main(int argc, char **argv) {
- extern char *optarg;
- extern int optind;
- int Ch;
- static char *prog_name;
- int MachineNo = 0, AllMachines = 0;
- char Machine[128], PassWord[128];
- uid_t UID = getuid();
- prog_name = argv[0];
- if (UID != 0) {
- printf("Sorry, this programme can only be run as root.\n");
- exit(1);
- }
- *Machine = 0;
- *PassWord = 0;
- if (argc < 2) Usage(prog_name);
- while ((Ch = getopt(argc, argv, "haem:p:")) != EOF) {
- switch(Ch) {
- case 'e': Encrypt(NULL); break; /* Does not return */
- case 'a': AllMachines = 1; break;
- case 'm': strcpy(Machine, optarg); break;
- case 'p': strcpy(PassWord, optarg); break;
- case 'h': Usage(prog_name);
- default: Usage(prog_name);
- }
- }
- if (*PassWord == 0) GetPassWord(PassWord); /* may not return */
- else Encrypt(PassWord);
- if (*Machine != 0) {
- Shutdown(Machine, PassWord);
- exit(0);
- }
- /* printf("exit for safety = %s.\n", PassWord);
-exit(0); */
- while (++MachineNo < LASTMACHINE+1) {
- pid_t Proc;
-#ifdef USE_DOMAIN
- sprintf(Machine, "%s%d%s", PREFIX, MachineNo, DOMAIN);
-#else
- sprintf(Machine, "%s%d", PREFIX, MachineNo);
-#endif
- Proc = fork();
- if (Proc == 0) { /* in child process */
- Shutdown(Machine, PassWord);
- exit(0);
- }
- }
- printf("Shutdowns initiated.\n");
-}