fi
+################################################
+# look for a method of setting the effective uid
+seteuid=no;
+if test $seteuid = no; then
+echo $ac_n "checking for setresuid""... $ac_c" 1>&6
+echo "configure:8510: checking for setresuid" >&5
+if eval "test \"`echo '$''{'samba_cv_USE_SETRESUID'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+
+if test "$cross_compiling" = yes; then
+ samba_cv_USE_SETRESUID=cross
+else
+ cat > conftest.$ac_ext <<EOF
+#line 8519 "configure"
+#include "confdefs.h"
+
+#define AUTOCONF_TEST 1
+#define USE_SETRESUID 1
+#include "confdefs.h"
+#include "${srcdir-.}/lib/util_sec.c"
+EOF
+if { (eval echo configure:8527: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+ samba_cv_USE_SETRESUID=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -fr conftest*
+ samba_cv_USE_SETRESUID=no
+fi
+rm -fr conftest*
+fi
+
+fi
+
+echo "$ac_t""$samba_cv_USE_SETRESUID" 1>&6
+if test x"$samba_cv_USE_SETRESUID" = x"yes"; then
+ seteuid=yes;cat >> confdefs.h <<\EOF
+#define USE_SETRESUID 1
+EOF
+
+fi
+fi
+
+
+if test $seteuid = no; then
+echo $ac_n "checking for setreuid""... $ac_c" 1>&6
+echo "configure:8553: checking for setreuid" >&5
+if eval "test \"`echo '$''{'samba_cv_USE_SETREUID'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+
+if test "$cross_compiling" = yes; then
+ samba_cv_USE_SETREUID=cross
+else
+ cat > conftest.$ac_ext <<EOF
+#line 8562 "configure"
+#include "confdefs.h"
+
+#define AUTOCONF_TEST 1
+#define USE_SETREUID 1
+#include "confdefs.h"
+#include "${srcdir-.}/lib/util_sec.c"
+EOF
+if { (eval echo configure:8570: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+ samba_cv_USE_SETREUID=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -fr conftest*
+ samba_cv_USE_SETREUID=no
+fi
+rm -fr conftest*
+fi
+
+fi
+
+echo "$ac_t""$samba_cv_USE_SETREUID" 1>&6
+if test x"$samba_cv_USE_SETREUID" = x"yes"; then
+ seteuid=yes;cat >> confdefs.h <<\EOF
+#define USE_SETREUID 1
+EOF
+
+fi
+fi
+
+if test $seteuid = no; then
+echo $ac_n "checking for seteuid""... $ac_c" 1>&6
+echo "configure:8595: checking for seteuid" >&5
+if eval "test \"`echo '$''{'samba_cv_USE_SETEUID'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+
+if test "$cross_compiling" = yes; then
+ samba_cv_USE_SETEUID=cross
+else
+ cat > conftest.$ac_ext <<EOF
+#line 8604 "configure"
+#include "confdefs.h"
+
+#define AUTOCONF_TEST 1
+#define USE_SETEUID 1
+#include "confdefs.h"
+#include "${srcdir-.}/lib/util_sec.c"
+EOF
+if { (eval echo configure:8612: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+ samba_cv_USE_SETEUID=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -fr conftest*
+ samba_cv_USE_SETEUID=no
+fi
+rm -fr conftest*
+fi
+
+fi
+
+echo "$ac_t""$samba_cv_USE_SETEUID" 1>&6
+if test x"$samba_cv_USE_SETEUID" = x"yes"; then
+ seteuid=yes;cat >> confdefs.h <<\EOF
+#define USE_SETEUID 1
+EOF
+
+fi
+fi
+
+if test $seteuid = no; then
+echo $ac_n "checking for setuidx""... $ac_c" 1>&6
+echo "configure:8637: checking for setuidx" >&5
+if eval "test \"`echo '$''{'samba_cv_USE_SETUIDX'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+
+if test "$cross_compiling" = yes; then
+ samba_cv_USE_SETUIDX=cross
+else
+ cat > conftest.$ac_ext <<EOF
+#line 8646 "configure"
+#include "confdefs.h"
+
+#define AUTOCONF_TEST 1
+#define USE_SETUIDX 1
+#include "confdefs.h"
+#include "${srcdir-.}/lib/util_sec.c"
+EOF
+if { (eval echo configure:8654: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+ samba_cv_USE_SETUIDX=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -fr conftest*
+ samba_cv_USE_SETUIDX=no
+fi
+rm -fr conftest*
+fi
+
+fi
+
+echo "$ac_t""$samba_cv_USE_SETUIDX" 1>&6
+if test x"$samba_cv_USE_SETUIDX" = x"yes"; then
+ seteuid=yes;cat >> confdefs.h <<\EOF
+#define USE_SETUIDX 1
+EOF
+
+fi
+fi
+
+
echo $ac_n "checking for shared mmap""... $ac_c" 1>&6
-echo "configure:8506: checking for shared mmap" >&5
+echo "configure:8679: checking for shared mmap" >&5
if eval "test \"`echo '$''{'samba_cv_HAVE_SHARED_MMAP'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
samba_cv_HAVE_SHARED_MMAP=cross
else
cat > conftest.$ac_ext <<EOF
-#line 8515 "configure"
+#line 8688 "configure"
#include "confdefs.h"
#include "${srcdir-.}/tests/shared_mmap.c"
EOF
-if { (eval echo configure:8519: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:8692: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
samba_cv_HAVE_SHARED_MMAP=yes
else
if test x"$samba_cv_HAVE_SHARED_MMAP" = x"yes"; then
cat >> confdefs.h <<\EOF
#define HAVE_SHARED_MMAP 1
+EOF
+
+ cat >> confdefs.h <<\EOF
+#define HAVE_MMAP 1
EOF
fi
echo $ac_n "checking for fcntl locking""... $ac_c" 1>&6
-echo "configure:8542: checking for fcntl locking" >&5
+echo "configure:8719: checking for fcntl locking" >&5
if eval "test \"`echo '$''{'samba_cv_HAVE_FCNTL_LOCK'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
samba_cv_HAVE_FCNTL_LOCK=cross
else
cat > conftest.$ac_ext <<EOF
-#line 8551 "configure"
+#line 8728 "configure"
#include "confdefs.h"
#include "${srcdir-.}/tests/fcntl_lock.c"
EOF
-if { (eval echo configure:8555: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:8732: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
samba_cv_HAVE_FCNTL_LOCK=yes
else
fi
echo $ac_n "checking for 64 bit fcntl locking""... $ac_c" 1>&6
-echo "configure:8578: checking for 64 bit fcntl locking" >&5
+echo "configure:8755: checking for 64 bit fcntl locking" >&5
if eval "test \"`echo '$''{'samba_cv_HAVE_STRUCT_FLOCK64'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
samba_cv_HAVE_STRUCT_FLOCK64=cross
else
cat > conftest.$ac_ext <<EOF
-#line 8587 "configure"
+#line 8764 "configure"
#include "confdefs.h"
#include <stdio.h>
#endif
}
EOF
-if { (eval echo configure:8608: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:8785: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
samba_cv_HAVE_STRUCT_FLOCK64=yes
else
fi
echo $ac_n "checking for sysv ipc""... $ac_c" 1>&6
-echo "configure:8631: checking for sysv ipc" >&5
+echo "configure:8808: checking for sysv ipc" >&5
if eval "test \"`echo '$''{'samba_cv_HAVE_SYSV_IPC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
samba_cv_HAVE_SYSV_IPC=cross
else
cat > conftest.$ac_ext <<EOF
-#line 8640 "configure"
+#line 8817 "configure"
#include "confdefs.h"
#include "${srcdir-.}/tests/sysv_ipc.c"
EOF
-if { (eval echo configure:8644: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:8821: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
samba_cv_HAVE_SYSV_IPC=yes
else
#################################################
# decide for the default sam-password-database
echo $ac_n "checking which sam password database to use""... $ac_c" 1>&6
-echo "configure:8669: checking which sam password database to use" >&5
+echo "configure:8846: checking which sam password database to use" >&5
# Check whether --with-sam_pwdb or --without-sam_pwdb was given.
if test "${with_sam_pwdb+set}" = set; then
withval="$with_sam_pwdb"
#################################################
# check for libmsrpc support
echo $ac_n "checking whether to use libmsrpc""... $ac_c" 1>&6
-echo "configure:8705: checking whether to use libmsrpc" >&5
+echo "configure:8882: checking whether to use libmsrpc" >&5
# Check whether --with-libmsrpc or --without-libmsrpc was given.
if test "${with_libmsrpc+set}" = set; then
withval="$with_libmsrpc"
#################################################
# check for libubiqx support
echo $ac_n "checking whether to use libubiqx""... $ac_c" 1>&6
-echo "configure:8745: checking whether to use libubiqx" >&5
+echo "configure:8922: checking whether to use libubiqx" >&5
# Check whether --with-libubiqx or --without-libubiqx was given.
if test "${with_libubiqx+set}" = set; then
withval="$with_libubiqx"
#################################################
# check for libsamba support
echo $ac_n "checking whether to use libsamba""... $ac_c" 1>&6
-echo "configure:8785: checking whether to use libsamba" >&5
+echo "configure:8962: checking whether to use libsamba" >&5
# Check whether --with-libsamba or --without-libsamba was given.
if test "${with_libsamba+set}" = set; then
withval="$with_libsamba"
#################################################
# check for libnmb support
echo $ac_n "checking whether to use libnmb""... $ac_c" 1>&6
-echo "configure:8825: checking whether to use libnmb" >&5
+echo "configure:9002: checking whether to use libnmb" >&5
# Check whether --with-libnmb or --without-libnmb was given.
if test "${with_libnmb+set}" = set; then
withval="$with_libnmb"
#################################################
# check for libsmbpw support
echo $ac_n "checking whether to use libsmbpw""... $ac_c" 1>&6
-echo "configure:8865: checking whether to use libsmbpw" >&5
+echo "configure:9042: checking whether to use libsmbpw" >&5
# Check whether --with-libsmbpw or --without-libsmbpw was given.
if test "${with_libsmbpw+set}" = set; then
withval="$with_libsmbpw"
#################################################
# check for libsmb support
echo $ac_n "checking whether to use libsmb""... $ac_c" 1>&6
-echo "configure:8906: checking whether to use libsmb" >&5
+echo "configure:9083: checking whether to use libsmb" >&5
# Check whether --with-libsmb or --without-libsmb was given.
if test "${with_libsmb+set}" = set; then
withval="$with_libsmb"
#################################################
# check for smbwrapper support
echo $ac_n "checking whether to use smbwrapper""... $ac_c" 1>&6
-echo "configure:8947: checking whether to use smbwrapper" >&5
+echo "configure:9124: checking whether to use smbwrapper" >&5
# Check whether --with-smbwrapper or --without-smbwrapper was given.
if test "${with_smbwrapper+set}" = set; then
withval="$with_smbwrapper"
#################################################
# check for the AFS filesystem
echo $ac_n "checking whether to use AFS""... $ac_c" 1>&6
-echo "configure:8991: checking whether to use AFS" >&5
+echo "configure:9168: checking whether to use AFS" >&5
# Check whether --with-afs or --without-afs was given.
if test "${with_afs+set}" = set; then
withval="$with_afs"
#################################################
# check for the DFS auth system
echo $ac_n "checking whether to use DFS auth""... $ac_c" 1>&6
-echo "configure:9017: checking whether to use DFS auth" >&5
+echo "configure:9194: checking whether to use DFS auth" >&5
# Check whether --with-dfs or --without-dfs was given.
if test "${with_dfs+set}" = set; then
withval="$with_dfs"
#################################################
# check for Kerberos IV auth system
echo $ac_n "checking whether to use Kerberos IV""... $ac_c" 1>&6
-echo "configure:9042: checking whether to use Kerberos IV" >&5
+echo "configure:9219: checking whether to use Kerberos IV" >&5
# Check whether --with-krb4 or --without-krb4 was given.
if test "${with_krb4+set}" = set; then
withval="$with_krb4"
EOF
echo $ac_n "checking for dn_expand in -lresolv""... $ac_c" 1>&6
-echo "configure:9052: checking for dn_expand in -lresolv" >&5
+echo "configure:9229: checking for dn_expand in -lresolv" >&5
ac_lib_var=`echo resolv'_'dn_expand | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
ac_save_LIBS="$LIBS"
LIBS="-lresolv $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 9060 "configure"
+#line 9237 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
dn_expand()
; return 0; }
EOF
-if { (eval echo configure:9071: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9248: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
#################################################
# check for automount support
echo $ac_n "checking whether to use AUTOMOUNT""... $ac_c" 1>&6
-echo "configure:9110: checking whether to use AUTOMOUNT" >&5
+echo "configure:9287: checking whether to use AUTOMOUNT" >&5
# Check whether --with-automount or --without-automount was given.
if test "${with_automount+set}" = set; then
withval="$with_automount"
#################################################
# check for smbmount support
echo $ac_n "checking whether to use SMBMOUNT""... $ac_c" 1>&6
-echo "configure:9135: checking whether to use SMBMOUNT" >&5
+echo "configure:9312: checking whether to use SMBMOUNT" >&5
# Check whether --with-smbmount or --without-smbmount was given.
if test "${with_smbmount+set}" = set; then
withval="$with_smbmount"
#################################################
# check for a LDAP password database
echo $ac_n "checking whether to use LDAP password database""... $ac_c" 1>&6
-echo "configure:9163: checking whether to use LDAP password database" >&5
+echo "configure:9340: checking whether to use LDAP password database" >&5
# Check whether --with-ldap or --without-ldap was given.
if test "${with_ldap+set}" = set; then
withval="$with_ldap"
#################################################
# check for a LDAP password database
echo $ac_n "checking whether to use LDAP password database""... $ac_c" 1>&6
-echo "configure:9189: checking whether to use LDAP password database" >&5
+echo "configure:9366: checking whether to use LDAP password database" >&5
# Check whether --with-nt5ldap or --without-nt5ldap was given.
if test "${with_nt5ldap+set}" = set; then
withval="$with_nt5ldap"
#################################################
# check for a LDAP password database
echo $ac_n "checking whether to use LDAP password database""... $ac_c" 1>&6
-echo "configure:9215: checking whether to use LDAP password database" >&5
+echo "configure:9392: checking whether to use LDAP password database" >&5
# Check whether --with-nt5ldap or --without-nt5ldap was given.
if test "${with_nt5ldap+set}" = set; then
withval="$with_nt5ldap"
#################################################
# check for a NISPLUS password database
echo $ac_n "checking whether to use NISPLUS password database""... $ac_c" 1>&6
-echo "configure:9241: checking whether to use NISPLUS password database" >&5
+echo "configure:9418: checking whether to use NISPLUS password database" >&5
# Check whether --with-nisplus or --without-nisplus was given.
if test "${with_nisplus+set}" = set; then
withval="$with_nisplus"
#################################################
# check for a NISPLUS_HOME support
echo $ac_n "checking whether to use NISPLUS_HOME""... $ac_c" 1>&6
-echo "configure:9266: checking whether to use NISPLUS_HOME" >&5
+echo "configure:9443: checking whether to use NISPLUS_HOME" >&5
# Check whether --with-nisplus-home or --without-nisplus-home was given.
if test "${with_nisplus_home+set}" = set; then
withval="$with_nisplus_home"
#################################################
# check for the secure socket layer
echo $ac_n "checking whether to use SSL""... $ac_c" 1>&6
-echo "configure:9291: checking whether to use SSL" >&5
+echo "configure:9468: checking whether to use SSL" >&5
# Check whether --with-ssl or --without-ssl was given.
if test "${with_ssl+set}" = set; then
withval="$with_ssl"
#################################################
# check for experimental mmap support
echo $ac_n "checking whether to use MMAP""... $ac_c" 1>&6
-echo "configure:9316: checking whether to use MMAP" >&5
+echo "configure:9493: checking whether to use MMAP" >&5
# Check whether --with-mmap or --without-mmap was given.
if test "${with_mmap+set}" = set; then
withval="$with_mmap"
#################################################
# check for syslog logging
echo $ac_n "checking whether to use syslog logging""... $ac_c" 1>&6
-echo "configure:9341: checking whether to use syslog logging" >&5
+echo "configure:9518: checking whether to use syslog logging" >&5
# Check whether --with-syslog or --without-syslog was given.
if test "${with_syslog+set}" = set; then
withval="$with_syslog"
#################################################
# check for a shared memory profiling support
echo $ac_n "checking whether to use profiling""... $ac_c" 1>&6
-echo "configure:9366: checking whether to use profiling" >&5
+echo "configure:9543: checking whether to use profiling" >&5
# Check whether --with-profile or --without-profile was given.
if test "${with_profile+set}" = set; then
withval="$with_profile"
#################################################
# check for experimental netatalk resource fork support
echo $ac_n "checking whether to support netatalk""... $ac_c" 1>&6
-echo "configure:9392: checking whether to support netatalk" >&5
+echo "configure:9569: checking whether to support netatalk" >&5
# Check whether --with-netatalk or --without-netatalk was given.
if test "${with_netatalk+set}" = set; then
withval="$with_netatalk"
QUOTAOBJS=noquotas.o
echo $ac_n "checking whether to support disk-quotas""... $ac_c" 1>&6
-echo "configure:9419: checking whether to support disk-quotas" >&5
+echo "configure:9596: checking whether to support disk-quotas" >&5
# Check whether --with-quotas or --without-quotas was given.
if test "${with_quotas+set}" = set; then
withval="$with_quotas"
#################################################
# these tests are taken from the GNU fileutils package
echo "checking how to get filesystem space usage" 1>&6
-echo "configure:9442: checking how to get filesystem space usage" >&5
+echo "configure:9619: checking how to get filesystem space usage" >&5
space=no
# Test for statvfs64.
if test $space = no; then
# SVR4
echo $ac_n "checking statvfs64 function (SVR4)""... $ac_c" 1>&6
-echo "configure:9449: checking statvfs64 function (SVR4)" >&5
+echo "configure:9626: checking statvfs64 function (SVR4)" >&5
if eval "test \"`echo '$''{'fu_cv_sys_stat_statvfs64'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
fu_cv_sys_stat_statvfs64=cross
else
cat > conftest.$ac_ext <<EOF
-#line 9457 "configure"
+#line 9634 "configure"
#include "confdefs.h"
#include <sys/types.h>
exit (statfs64 (".", &fsd));
}
EOF
-if { (eval echo configure:9468: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:9645: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
fu_cv_sys_stat_statvfs64=yes
else
if test $space = no; then
# SVR4
echo $ac_n "checking statvfs function (SVR4)""... $ac_c" 1>&6
-echo "configure:9501: checking statvfs function (SVR4)" >&5
+echo "configure:9678: checking statvfs function (SVR4)" >&5
if eval "test \"`echo '$''{'fu_cv_sys_stat_statvfs'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 9506 "configure"
+#line 9683 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/statvfs.h>
struct statvfs fsd; statvfs (0, &fsd);
; return 0; }
EOF
-if { (eval echo configure:9514: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9691: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
fu_cv_sys_stat_statvfs=yes
else
if test $space = no; then
# DEC Alpha running OSF/1
echo $ac_n "checking for 3-argument statfs function (DEC OSF/1)""... $ac_c" 1>&6
-echo "configure:9539: checking for 3-argument statfs function (DEC OSF/1)" >&5
+echo "configure:9716: checking for 3-argument statfs function (DEC OSF/1)" >&5
if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs3_osf1'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
fu_cv_sys_stat_statfs3_osf1=no
else
cat > conftest.$ac_ext <<EOF
-#line 9547 "configure"
+#line 9724 "configure"
#include "confdefs.h"
#include <sys/param.h>
exit (statfs (".", &fsd, sizeof (struct statfs)));
}
EOF
-if { (eval echo configure:9560: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:9737: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
fu_cv_sys_stat_statfs3_osf1=yes
else
if test $space = no; then
# AIX
echo $ac_n "checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)""... $ac_c" 1>&6
-echo "configure:9587: checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)" >&5
+echo "configure:9764: checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)" >&5
if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs2_bsize'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
fu_cv_sys_stat_statfs2_bsize=no
else
cat > conftest.$ac_ext <<EOF
-#line 9595 "configure"
+#line 9772 "configure"
#include "confdefs.h"
#ifdef HAVE_SYS_PARAM_H
exit (statfs (".", &fsd));
}
EOF
-if { (eval echo configure:9614: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:9791: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
fu_cv_sys_stat_statfs2_bsize=yes
else
if test $space = no; then
# SVR3
echo $ac_n "checking for four-argument statfs (AIX-3.2.5, SVR3)""... $ac_c" 1>&6
-echo "configure:9641: checking for four-argument statfs (AIX-3.2.5, SVR3)" >&5
+echo "configure:9818: checking for four-argument statfs (AIX-3.2.5, SVR3)" >&5
if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs4'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
fu_cv_sys_stat_statfs4=no
else
cat > conftest.$ac_ext <<EOF
-#line 9649 "configure"
+#line 9826 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/statfs.h>
exit (statfs (".", &fsd, sizeof fsd, 0));
}
EOF
-if { (eval echo configure:9659: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:9836: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
fu_cv_sys_stat_statfs4=yes
else
if test $space = no; then
# 4.4BSD and NetBSD
echo $ac_n "checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)""... $ac_c" 1>&6
-echo "configure:9686: checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)" >&5
+echo "configure:9863: checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)" >&5
if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs2_fsize'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
fu_cv_sys_stat_statfs2_fsize=no
else
cat > conftest.$ac_ext <<EOF
-#line 9694 "configure"
+#line 9871 "configure"
#include "confdefs.h"
#include <sys/types.h>
#ifdef HAVE_SYS_PARAM_H
exit (statfs (".", &fsd));
}
EOF
-if { (eval echo configure:9710: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:9887: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
fu_cv_sys_stat_statfs2_fsize=yes
else
if test $space = no; then
# Ultrix
echo $ac_n "checking for two-argument statfs with struct fs_data (Ultrix)""... $ac_c" 1>&6
-echo "configure:9737: checking for two-argument statfs with struct fs_data (Ultrix)" >&5
+echo "configure:9914: checking for two-argument statfs with struct fs_data (Ultrix)" >&5
if eval "test \"`echo '$''{'fu_cv_sys_stat_fs_data'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
fu_cv_sys_stat_fs_data=no
else
cat > conftest.$ac_ext <<EOF
-#line 9745 "configure"
+#line 9922 "configure"
#include "confdefs.h"
#include <sys/types.h>
#ifdef HAVE_SYS_PARAM_H
exit (statfs (".", &fsd) != 1);
}
EOF
-if { (eval echo configure:9765: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:9942: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
fu_cv_sys_stat_fs_data=yes
else
:
else
cat > conftest.$ac_ext <<EOF
-#line 9794 "configure"
+#line 9971 "configure"
#include "confdefs.h"
#include "${srcdir-.}/tests/summary.c"
EOF
-if { (eval echo configure:9798: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:9975: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
echo "configure OK";
else
AC_DEFINE(HAVE_TRAPDOOR_UID)
fi
+################################################
+# look for a method of setting the effective uid
+seteuid=no;
+if test $seteuid = no; then
+AC_CACHE_CHECK([for setresuid],samba_cv_USE_SETRESUID,[
+AC_TRY_RUN([
+#define AUTOCONF_TEST 1
+#define USE_SETRESUID 1
+#include "confdefs.h"
+#include "${srcdir-.}/lib/util_sec.c"],
+ samba_cv_USE_SETRESUID=yes,samba_cv_USE_SETRESUID=no,samba_cv_USE_SETRESUID=cross)])
+if test x"$samba_cv_USE_SETRESUID" = x"yes"; then
+ seteuid=yes;AC_DEFINE(USE_SETRESUID)
+fi
+fi
+
+
+if test $seteuid = no; then
+AC_CACHE_CHECK([for setreuid],samba_cv_USE_SETREUID,[
+AC_TRY_RUN([
+#define AUTOCONF_TEST 1
+#define USE_SETREUID 1
+#include "confdefs.h"
+#include "${srcdir-.}/lib/util_sec.c"],
+ samba_cv_USE_SETREUID=yes,samba_cv_USE_SETREUID=no,samba_cv_USE_SETREUID=cross)])
+if test x"$samba_cv_USE_SETREUID" = x"yes"; then
+ seteuid=yes;AC_DEFINE(USE_SETREUID)
+fi
+fi
+
+if test $seteuid = no; then
+AC_CACHE_CHECK([for seteuid],samba_cv_USE_SETEUID,[
+AC_TRY_RUN([
+#define AUTOCONF_TEST 1
+#define USE_SETEUID 1
+#include "confdefs.h"
+#include "${srcdir-.}/lib/util_sec.c"],
+ samba_cv_USE_SETEUID=yes,samba_cv_USE_SETEUID=no,samba_cv_USE_SETEUID=cross)])
+if test x"$samba_cv_USE_SETEUID" = x"yes"; then
+ seteuid=yes;AC_DEFINE(USE_SETEUID)
+fi
+fi
+
+if test $seteuid = no; then
+AC_CACHE_CHECK([for setuidx],samba_cv_USE_SETUIDX,[
+AC_TRY_RUN([
+#define AUTOCONF_TEST 1
+#define USE_SETUIDX 1
+#include "confdefs.h"
+#include "${srcdir-.}/lib/util_sec.c"],
+ samba_cv_USE_SETUIDX=yes,samba_cv_USE_SETUIDX=no,samba_cv_USE_SETUIDX=cross)])
+if test x"$samba_cv_USE_SETUIDX" = x"yes"; then
+ seteuid=yes;AC_DEFINE(USE_SETUIDX)
+fi
+fi
+
+
AC_CACHE_CHECK([for shared mmap],samba_cv_HAVE_SHARED_MMAP,[
AC_TRY_RUN([#include "${srcdir-.}/tests/shared_mmap.c"],
samba_cv_HAVE_SHARED_MMAP=yes,samba_cv_HAVE_SHARED_MMAP=no,samba_cv_HAVE_SHARED_MMAP=cross)])
if test x"$samba_cv_HAVE_SHARED_MMAP" = x"yes"; then
AC_DEFINE(HAVE_SHARED_MMAP)
+ AC_DEFINE(HAVE_MMAP)
fi
AC_CACHE_CHECK([for fcntl locking],samba_cv_HAVE_FCNTL_LOCK,[
#undef WITH_NT5LDAP
+#undef USE_SETEUID
+#undef USE_SETRESUID
+#undef USE_SETREUID
+#undef USE_SETUIDX
+
/* The number of bytes in a int. */
#undef SIZEOF_INT
/*The following definitions come from msrpc/msrpcd_process.c */
-BOOL get_user_creds(int c, vuser_key *uk);
-void close_srv_auth_array(rpcsrv_struct *l);
-void add_srv_auth_fn(rpcsrv_struct *l, srv_auth_fns *fn);
-BOOL msrpcd_init(int c, rpcsrv_struct **l);
-void msrpcd_process(msrpc_service_fns *fn, rpcsrv_struct *l, const char* name);
+BOOL get_user_creds(int c, vuser_key * uk);
+void close_srv_auth_array(rpcsrv_struct * l);
+void add_srv_auth_fn(rpcsrv_struct * l, srv_auth_fns * fn);
+BOOL msrpcd_init(int c, rpcsrv_struct ** l);
+void msrpcd_process(msrpc_service_fns * fn, rpcsrv_struct * l,
+ const char *name);
/*The following definitions come from netlogond/creds_db.c */
uint32 switch_value, SRV_SHARE_INFO_CTR *ctr,
uint32 preferred_len,
ENUM_HND *hnd);
+BOOL srv_net_srv_share_get_info(const char *srv_name,
+ const char *share_name,
+ uint32 info_level);
BOOL srv_net_srv_file_enum( char *srv_name, char *qual_name, uint32 file_id,
uint32 switch_value, SRV_FILE_INFO_CTR *ctr,
uint32 preferred_len,
/*The following definitions come from rpc_client/msrpc_netlogon.c */
-BOOL modify_trust_password(const char *domain, const char *remote_machine,
+BOOL modify_trust_password(const char *domain, const char *srv_name,
const uchar orig_trust_passwd_hash[16],
const uchar new_trust_passwd_hash[16],
uint16 sec_chan);
DOM_SID *owner_sid, DOM_SID *grp_sid,
SEC_ACL *sacl, SEC_ACL *dacl);
void free_sec_desc(SEC_DESC *t);
+BOOL sec_io_desc(char *desc, SEC_DESC *t, prs_struct *ps, int depth);
BOOL make_sec_desc_buf(SEC_DESC_BUF *buf, int len, SEC_DESC *data);
void free_sec_desc_buf(SEC_DESC_BUF *buf);
BOOL sec_io_desc_buf(char *desc, SEC_DESC_BUF *sec, prs_struct *ps, int depth);
void cmd_srv_enum_tprt(struct client_info *info, int argc, char *argv[]);
void cmd_srv_enum_conn(struct client_info *info, int argc, char *argv[]);
void cmd_srv_enum_shares(struct client_info *info, int argc, char *argv[]);
+void cmd_srv_share_get_info(struct client_info *info, int argc, char *argv[]);
void cmd_srv_enum_sess(struct client_info *info, int argc, char *argv[]);
void cmd_srv_enum_files(struct client_info *info, int argc, char *argv[]);
void cmd_time(struct client_info *info, int argc, char *argv[]);
uint32 switch_value, SRV_SHARE_INFO_CTR *ctr,
uint32 preferred_len,
ENUM_HND *hnd);
+BOOL srv_net_srv_share_get_info(const char *srv_name,
+ const char *share_name,
+ uint32 info_level);
BOOL srv_net_srv_file_enum( char *srv_name, char *qual_name, uint32 file_id,
uint32 switch_value, SRV_FILE_INFO_CTR *ctr,
uint32 preferred_len,
/*The following definitions come from rpc_client/msrpc_netlogon.c */
-BOOL modify_trust_password(const char *domain, const char *remote_machine,
+BOOL modify_trust_password(const char *domain, const char *srv_name,
const uchar orig_trust_passwd_hash[16],
const uchar new_trust_passwd_hash[16],
uint16 sec_chan);
DOM_SID *owner_sid, DOM_SID *grp_sid,
SEC_ACL *sacl, SEC_ACL *dacl);
void free_sec_desc(SEC_DESC *t);
+BOOL sec_io_desc(char *desc, SEC_DESC *t, prs_struct *ps, int depth);
BOOL make_sec_desc_buf(SEC_DESC_BUF *buf, int len, SEC_DESC *data);
void free_sec_desc_buf(SEC_DESC_BUF *buf);
BOOL sec_io_desc_buf(char *desc, SEC_DESC_BUF *sec, prs_struct *ps, int depth);
ENUM_HND *hnd);
BOOL srv_io_q_net_share_enum(char *desc, SRV_Q_NET_SHARE_ENUM *q_n, prs_struct *ps, int depth);
BOOL srv_io_r_net_share_enum(char *desc, SRV_R_NET_SHARE_ENUM *r_n, prs_struct *ps, int depth);
+BOOL make_srv_q_net_share_get_info(SRV_Q_NET_SHARE_GET_INFO *q_n,
+ const UNISTR2 *srv_name,
+ const UNISTR2 *share_name,
+ uint32 info_level);
+BOOL srv_io_q_net_share_get_info(char *desc, SRV_Q_NET_SHARE_GET_INFO *q_n,
+ prs_struct *ps, int depth);
+BOOL make_srv_r_net_share_get_info(SRV_R_NET_SHARE_GET_INFO *r_n,
+ uint32 info_level,
+ SHARE_INFO_CTR *ctr,
+ uint32 status);
+BOOL srv_io_r_net_share_get_info(char *desc, SRV_R_NET_SHARE_GET_INFO *r_n,
+ prs_struct *ps, int depth);
BOOL make_srv_sess_info0_str(SESS_INFO_0_STR *ss0, char *name);
BOOL make_srv_sess_info0(SESS_INFO_0 *ss0, char *name);
BOOL make_srv_sess_info1_str(SESS_INFO_1_STR *ss1, char *name, char *user);
#define SRV_NETFILEENUM 0x09
#define SRV_NETSESSENUM 0x0c
#define SRV_NETSHAREENUM 0x0f
-#define SRV_NETSHAREENUM2 0x24
+#define SRV_NETSHAREGETINFO 0x10
+#define SRV_NETSHAREDEL 0x12
#define SRV_NETTRANSPORTENUM 0x1a
#define SRV_NET_SRV_GET_INFO 0x15
#define SRV_NET_SRV_SET_INFO 0x16
#define SRV_NET_REMOTE_TOD 0x1c
+#define SRV_NETSHAREENUM2 0x24
/* SESS_INFO_0 (pointers to level 0 session info strings) */
typedef struct ptr_sess_info0
} SH_INFO_2_STR;
+
+typedef struct _sh_info_502_hdr
+{
+ SH_INFO_2 info2_hdr;
+ uint32 sd_size; /* how useless... */
+ uint32 sd_ptr; /* for sd? */
+} SH_INFO_502_HDR;
+
+typedef struct _sh_info_502_data
+{
+ SH_INFO_2_STR info2_str;
+
+ uint32 sd_size2;
+ SEC_DESC sd; /* security descriptor */
+} SH_INFO_502_DATA;
+
+/* SHARE_INFO_502 (level 502 share info) */
+typedef struct _share_info_502
+{
+ SH_INFO_502_HDR info502_hdr;
+ SH_INFO_502_DATA info502_data;
+} SHARE_INFO_502;
+
+
+typedef union _share_info_ctr
+{
+ SHARE_INFO_502 info502;
+} SHARE_INFO_CTR;
+
+
/* SRV_SHARE_INFO_2 */
typedef struct share_info_2_info
{
} SRV_Q_NET_SHARE_ENUM;
-
/* SRV_R_NET_SHARE_ENUM */
typedef struct r_net_share_enum_info
{
} SRV_R_NET_SHARE_ENUM;
+
+/* SRV_Q_NET_SHARE_GET_INFO */
+typedef struct q_net_share_get_info
+{
+ uint32 ptr_srv_name; /* pointer (to server name?) */
+ UNISTR2 uni_srv_name; /* server name */
+
+ UNISTR2 share_name;
+ uint32 info_level;
+} SRV_Q_NET_SHARE_GET_INFO;
+
+/* SRV_R_NET_SHARE_GET_INFO */
+typedef struct r_net_share_get_info
+{
+ uint32 info_level;
+ uint32 info_ptr;
+ SHARE_INFO_CTR info;
+
+ uint32 status;
+} SRV_R_NET_SHARE_GET_INFO;
+
+
/* FILE_INFO_3 (level 3 file info strings) */
typedef struct file_info3_info
{
DOM_SID *owner_sid, DOM_SID *grp_sid,
SEC_ACL *sacl, SEC_ACL *dacl);
void free_sec_desc(SEC_DESC *t);
+BOOL sec_io_desc(char *desc, SEC_DESC *t, prs_struct *ps, int depth);
BOOL make_sec_desc_buf(SEC_DESC_BUF *buf, int len, SEC_DESC *data);
void free_sec_desc_buf(SEC_DESC_BUF *buf);
BOOL sec_io_desc_buf(char *desc, SEC_DESC_BUF *sec, prs_struct *ps, int depth);
return valid_enum;
}
+/****************************************************************************
+do a share get info
+****************************************************************************/
+BOOL srv_net_srv_share_get_info(const char *srv_name,
+ const char *share_name,
+ uint32 info_level)
+{
+ prs_struct data;
+ prs_struct rdata;
+ SRV_Q_NET_SHARE_GET_INFO q_o;
+ struct cli_connection *con = NULL;
+ UNISTR2 uni_srv_name;
+ UNISTR2 uni_share_name;
+ BOOL valid_result = False;
+
+ if (srv_name == NULL || share_name == NULL) return False;
+
+ if (!cli_connection_init(srv_name, PIPE_SRVSVC, &con))
+ {
+ return False;
+ }
+
+ prs_init(&data , 0, 4, False);
+ prs_init(&rdata, 0, 4, True );
+
+ DEBUG(4, ("SRV Get Share Info, share:%s, level %d\n",
+ share_name, info_level));
+
+ make_unistr2(&uni_srv_name, srv_name, strlen(srv_name) + 1);
+ make_unistr2(&uni_share_name, share_name, strlen(share_name) + 1);
+
+ /* store the parameters */
+ make_srv_q_net_share_get_info(&q_o, &uni_srv_name, &uni_share_name,
+ info_level);
+
+ /* turn parameters into data stream */
+ if (srv_io_q_net_share_get_info("", &q_o, &data, 0) &&
+ rpc_con_pipe_req(con, SRV_NETSHAREGETINFO, &data, &rdata))
+ {
+ SRV_R_NET_SHARE_GET_INFO r_o;
+
+ srv_io_r_net_share_get_info("", &r_o, &rdata, 0);
+
+ valid_result = False;
+ }
+
+ prs_free_data(&data );
+ prs_free_data(&rdata );
+
+ cli_connection_unlink(con);
+
+ return valid_result;
+}
+
/****************************************************************************
do a server net file enum
****************************************************************************/
/*******************************************************************
reads or writes a structure.
********************************************************************/
-static BOOL sec_io_desc(char *desc, SEC_DESC *t, prs_struct *ps, int depth)
+BOOL sec_io_desc(char *desc, SEC_DESC *t, prs_struct *ps, int depth)
{
#if 0
uint32 off_owner_sid;
* Copyright (C) Andrew Tridgell 1992-1999,
* Copyright (C) Luke Kenneth Casson Leighton 1996-1999,
* Copyright (C) Paul Ashton 1997-1999.
+ * Copyright (C) Elrond 2000
*
* 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
#include "includes.h"
+#include "nterr.h"
#include "rpc_parse.h"
extern int DEBUGLEVEL;
prs_align(ps);
- smb_io_unistr2("", &(ss2->uni_netname), sh2->ptr_netname, ps, depth);
+ smb_io_unistr2("netname", &(ss2->uni_netname), sh2->ptr_netname, ps, depth);
prs_align(ps);
- smb_io_unistr2("", &(ss2->uni_remark ), sh2->ptr_remark , ps, depth);
+ smb_io_unistr2("remark ", &(ss2->uni_remark ), sh2->ptr_remark , ps, depth);
prs_align(ps);
- smb_io_unistr2("", &(ss2->uni_path ), sh2->ptr_path , ps, depth);
+ smb_io_unistr2("path ", &(ss2->uni_path ), sh2->ptr_path , ps, depth);
prs_align(ps);
- smb_io_unistr2("", &(ss2->uni_passwd ), sh2->ptr_passwd , ps, depth);
+ smb_io_unistr2("passwd ", &(ss2->uni_passwd ), sh2->ptr_passwd , ps, depth);
prs_align(ps);
return True;
return True;
}
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+static BOOL srv_io_share_info502_hdr(char *desc, SH_INFO_502_HDR *sh502,
+ prs_struct *ps, int depth)
+{
+ if (sh502 == NULL) return False;
+
+ prs_debug(ps, depth, desc, "srv_io_share_info502_hdr");
+ depth++;
+
+ prs_align(ps);
+
+ srv_io_share_info2("", &(sh502->info2_hdr), ps, depth);
+
+ prs_uint32("sd_size", ps, depth, &(sh502->sd_size));
+ prs_uint32("sd_ptr ", ps, depth, &(sh502->sd_ptr));
+
+ return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+static BOOL srv_io_share_info502_data(char *desc,
+ SH_INFO_502_DATA *sh502,
+ SH_INFO_502_HDR *si502,
+ prs_struct *ps, int depth)
+{
+ if (sh502 == NULL) return False;
+
+ prs_debug(ps, depth, desc, "srv_io_share_info502_data");
+ depth++;
+
+ prs_align(ps);
+
+ srv_io_share_info2_str("", &(sh502->info2_str), &(si502->info2_hdr),
+ ps, depth);
+ prs_align(ps);
+
+ if (si502->sd_ptr)
+ {
+ prs_uint32("sd_size2", ps, depth, &(sh502->sd_size2));
+
+ sec_io_desc("", &(sh502->sd), ps, depth);
+ }
+
+ return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+static BOOL srv_io_share_info502(char *desc,
+ SHARE_INFO_502 *sh502,
+ prs_struct *ps, int depth)
+{
+ if (sh502 == NULL) return False;
+
+ prs_debug(ps, depth, desc, "srv_io_share_info502");
+ depth++;
+
+ prs_align(ps);
+
+ srv_io_share_info502_hdr("", &(sh502->info502_hdr), ps, depth);
+ srv_io_share_info502_data("",
+ &(sh502->info502_data),
+ &(sh502->info502_hdr),
+ ps, depth);
+
+ return True;
+}
+
+
/*******************************************************************
reads or writes a structure.
********************************************************************/
return True;
}
+
+/*******************************************************************
+ makes a structure
+********************************************************************/
+BOOL make_srv_q_net_share_get_info(SRV_Q_NET_SHARE_GET_INFO *q_n,
+ const UNISTR2 *srv_name,
+ const UNISTR2 *share_name,
+ uint32 info_level)
+{
+ if (q_n == NULL) return False;
+
+ q_n->ptr_srv_name = (srv_name != NULL);
+ copy_unistr2(&(q_n->uni_srv_name), srv_name);
+ copy_unistr2(&(q_n->share_name), share_name);
+ q_n->info_level = info_level;
+
+ return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+BOOL srv_io_q_net_share_get_info(char *desc, SRV_Q_NET_SHARE_GET_INFO *q_n,
+ prs_struct *ps, int depth)
+{
+ if (q_n == NULL) return False;
+
+ prs_debug(ps, depth, desc, "srv_io_q_net_share_get_info");
+ depth++;
+
+ prs_align(ps);
+
+ prs_uint32("ptr_srv_name", ps, depth, &(q_n->ptr_srv_name));
+ smb_io_unistr2("uni_srv_name", &(q_n->uni_srv_name), True, ps, depth);
+ prs_align(ps);
+
+ smb_io_unistr2("share_name", &(q_n->share_name), True, ps, depth);
+ prs_align(ps);
+
+ prs_uint32("info_level", ps, depth, &(q_n->info_level));
+
+ return True;
+}
+
+/*******************************************************************
+ makes a structure
+********************************************************************/
+BOOL make_srv_r_net_share_get_info(SRV_R_NET_SHARE_GET_INFO *r_n,
+ uint32 info_level,
+ SHARE_INFO_CTR *ctr,
+ uint32 status)
+{
+ if (r_n == NULL) return False;
+
+ r_n->info_level = info_level;
+
+ if (status == NT_STATUS_NOPROBLEMO)
+ {
+ r_n->info_ptr = (ctr != NULL ? 1 : 0);
+ }
+ else
+ {
+ r_n->info_ptr = 0;
+ }
+
+ r_n->status = status;
+
+ return True;
+}
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+BOOL srv_io_r_net_share_get_info(char *desc, SRV_R_NET_SHARE_GET_INFO *r_n,
+ prs_struct *ps, int depth)
+{
+ if (r_n == NULL) return False;
+
+ prs_debug(ps, depth, desc, "srv_io_r_net_share_get_info");
+ depth++;
+
+ prs_align(ps);
+
+ prs_uint32("info_level", ps, depth, &(r_n->info_level));
+ prs_uint32("info_ptr ", ps, depth, &(r_n->info_ptr));
+
+ if (r_n->info_ptr)
+ {
+ switch (r_n->info_level)
+ {
+ case 502:
+ srv_io_share_info502("info",
+ &(r_n->info.info502),
+ ps, depth);
+ break;
+ default:
+ DEBUG(1, ("srv_io_r_net_share_get_info: Unsupported info level %d\n",
+ r_n->info_level));
+ return False;
+ break;
+ }
+ }
+
+ prs_uint32("status ", ps, depth, &(r_n->status));
+
+ return True;
+}
+
+
/*******************************************************************
makes a SESS_INFO_0_STR structure
********************************************************************/
return False;
}
-
r_n.sess_level = q_n.sess_level;
r_n.status = _srv_net_sess_enum( &q_n.uni_srv_name,
/*******************************************************************
********************************************************************/
-static BOOL api_srv_net_share_enum( rpcsrv_struct *p, prs_struct *data,
- prs_struct *rdata )
+static BOOL api_srv_net_share_enum(rpcsrv_struct *p, prs_struct *data,
+ prs_struct *rdata )
{
- SRV_Q_NET_SHARE_ENUM q_n;
+ SRV_Q_NET_SHARE_ENUM q_n;
SRV_R_NET_SHARE_ENUM r_n;
- SRV_SHARE_INFO_CTR ctr;
+ SRV_SHARE_INFO_CTR ctr;
- BOOL ret;
+ BOOL ret;
ZERO_STRUCT(q_n);
ZERO_STRUCT(r_n);
ZERO_STRUCT(ctr);
- q_n.ctr = &ctr;
+ q_n.ctr = &ctr;
r_n.ctr = &ctr;
- /* grab the net server get enum */
- if (!srv_io_q_net_share_enum("", &q_n, data, 0))
+ /* grab the net server get enum */
+ if (!srv_io_q_net_share_enum("", &q_n, data, 0))
{
return False;
}
-
r_n.share_level = q_n.share_level;
r_n.status = _srv_net_share_enum( &q_n.uni_srv_name,
return ret;
}
+/*******************************************************************
+********************************************************************/
+static BOOL api_srv_net_share_get_info(rpcsrv_struct *p, prs_struct *data,
+ prs_struct *rdata )
+{
+ SRV_Q_NET_SHARE_GET_INFO q_n;
+ /* SRV_R_NET_SHARE_GET_INFO r_n; */
+
+ ZERO_STRUCT(q_n);
+ /* ZERO_STRUCT(r_n); */
+
+ /* grab the request */
+ if (!srv_io_q_net_share_get_info("", &q_n, data, 0))
+ {
+ return False;
+ }
+
+ /* Don't know yet, how to answer, next */
+ return False;
+}
+
/*******************************************************************
********************************************************************/
static BOOL api_srv_net_remote_tod( rpcsrv_struct *p, prs_struct *data,
********************************************************************/
static const struct api_struct api_srv_cmds[] =
{
- { "SRV_NETCONNENUM" , SRV_NETCONNENUM , api_srv_net_conn_enum },
- { "SRV_NETSESSENUM" , SRV_NETSESSENUM , api_srv_net_sess_enum },
- { "SRV_NETSHAREENUM" , SRV_NETSHAREENUM , api_srv_net_share_enum },
- { "SRV_NETSHAREENUM2" , SRV_NETSHAREENUM2 , api_srv_net_share_enum },
- { "SRV_NETFILEENUM" , SRV_NETFILEENUM , api_srv_net_file_enum },
- { "SRV_NET_SRV_GET_INFO", SRV_NET_SRV_GET_INFO, api_srv_net_srv_get_info },
- { "SRV_NET_REMOTE_TOD" , SRV_NET_REMOTE_TOD , api_srv_net_remote_tod },
- { NULL , 0 , NULL }
+ { "SRV_NETCONNENUM" , SRV_NETCONNENUM , api_srv_net_conn_enum },
+ { "SRV_NETSESSENUM" , SRV_NETSESSENUM , api_srv_net_sess_enum },
+ { "SRV_NETSHAREENUM" , SRV_NETSHAREENUM , api_srv_net_share_enum },
+ { "SRV_NETSHAREENUM2" , SRV_NETSHAREENUM2 , api_srv_net_share_enum },
+ { "SRV_NETSHAREGETINFO" , SRV_NETSHAREGETINFO , api_srv_net_share_get_info},
+ { "SRV_NETFILEENUM" , SRV_NETFILEENUM , api_srv_net_file_enum },
+ { "SRV_NET_SRV_GET_INFO", SRV_NET_SRV_GET_INFO, api_srv_net_srv_get_info },
+ { "SRV_NET_REMOTE_TOD" , SRV_NET_REMOTE_TOD , api_srv_net_remote_tod },
+ { NULL , 0 , NULL }
};
/*******************************************************************
}
}
+/****************************************************************************
+share get info
+****************************************************************************/
+void cmd_srv_share_get_info(struct client_info *info, int argc, char *argv[])
+{
+ fstring dest_srv;
+ const char *share_name;
+ uint32 info_level = 502;
+
+ BOOL res = True;
+
+ fstrcpy(dest_srv, "\\\\");
+ fstrcat(dest_srv, info->dest_host);
+ strupper(dest_srv);
+
+ if (argc < 2)
+ {
+ report(out_hnd, "srvshareinfo SHARE [502|1|2]\n");
+ return;
+ }
+
+ share_name = argv[1];
+
+ if (argc > 2)
+ {
+ info_level = (uint32)strtol(argv[2], (char**)NULL, 10);
+ }
+
+ DEBUG(4,
+ ("cmd_srv_share_get_info: server:%s, share:%s, info level:%d\n",
+ dest_srv, share_name, (int)info_level));
+
+ /* enumerate shares_files on server */
+ res = res
+ ? srv_net_srv_share_get_info(dest_srv, share_name, info_level)
+ : False;
+
+ if (res)
+ {
+ DEBUG(5,("cmd_srv_share_get_info: query succeeded\n"));
+ }
+ else
+ {
+ DEBUG(5,("cmd_srv_share_get_info: query failed\n"));
+ }
+}
+
/****************************************************************************
server enum sessions
****************************************************************************/
"List shares on a server",
{NULL, NULL}
},
+ {
+ "srvshareinfo",
+ cmd_srv_share_get_info,
+ "SHARE [1|2|502]\tGet info for share",
+ {NULL, NULL}
+ },
{
"srvtransports",
cmd_srv_enum_tprt,
main()
{
-#ifndef HAVE_FCNTL_LOCK
+#if !(defined(HAVE_FCNTL_LOCK) || defined(HAVE_STRUCT_FLOCK64))
printf("ERROR: No locking available. Running Samba would be unsafe\n");
exit(1);
#endif
printf("WARNING: no shared memory. Running with slow locking code\n");
#endif
-#ifdef HAVE_TRAPDOOR_UID
- printf("WARNING: trapdoor uid system - Samba may not operate correctly\n");
+#if !(defined(HAVE_IFACE_IFCONF) || defined(HAVE_IFACE_IFREQ) || defined(HAVE_IFACE_AIX))
+ printf("WARNING: No automated network interface determination\n");
#endif
-#if !(defined(HAVE_NETMASK_IFCONF) || defined(HAVE_NETMASK_IFREQ) || defined(HAVE_NETMASK_AIX))
- printf("WARNING: No automated netmask determination - use an interfaces line\n");
+#if !(defined(USE_SETEUID) || defined(USE_SETREUID) || defined(USE_SETRESUID) || defined(USE_SETUIDX))
+ printf("ERROR: no seteuid method available\n");
+ exit(1);
#endif
#if !(defined(STAT_STATVFS) || defined(STAT_STATVFS64) || defined(STAT_STATFS3_OSF1) || defined(STAT_STATFS2_BSIZE) || defined(STAT_STATFS4) || defined(STAT_STATFS2_FSIZE) || defined(STAT_STATFS2_FS_DATA))