From cdcac240f95b1d5f21d8fa171c97729b94250a5c Mon Sep 17 00:00:00 2001 From: cvs2svn Import User Date: Fri, 20 Jun 2003 12:58:10 +0000 Subject: [PATCH] This commit was manufactured by cvs2svn to create tag 'APPLIANCE_HEAD_PRE_3_0_0_RC2_MERGE'. --- .cvsignore | 2 - source/auth/auth_compat.c | 122 ----- source/codepages/lowcase.dat | Bin 131072 -> 0 bytes source/codepages/upcase.dat | Bin 131072 -> 0 bytes source/codepages/valid.dat | Bin 65536 -> 0 bytes source/include/hmacmd5.h | 32 -- source/include/intl.h | 24 - source/include/libsmb_internal.h | 67 --- source/include/md5.h | 24 - source/include/nt_status.h | 63 --- source/include/pstring.h | 36 -- source/include/session.h | 40 -- source/intl/.cvsignore | 2 - source/intl/linux-msg.sed | 100 ---- source/lib/hmacmd5.c | 134 ------ source/lib/md5.c | 247 ---------- source/lib/util_pw.c | 89 ---- source/lib/util_smbd.c | 65 --- source/libads/.cvsignore | 2 - source/libads/ads_status.c | 133 ------ source/libads/kerberos.c | 140 ------ source/libsmb/libsmb_compat.c | 281 ------------ source/nsswitch/winbind_client.h | 16 - source/passdb/.cvsignore | 2 - source/passdb/pdb_compat.c | 104 ----- source/python/.cvsignore | 1 - source/python/README | 28 -- source/python/gprinterdata | 39 -- source/python/gtdbtool | 39 -- source/python/gtkdictbrowser.py | 272 ----------- source/python/py_spoolss_drivers_conv.c | 179 -------- source/python/py_spoolss_jobs.c | 377 --------------- source/python/py_spoolss_jobs_conv.c | 102 ----- source/python/py_spoolss_ports_conv.c | 58 --- source/python/py_spoolss_printers_conv.c | 354 -------------- source/python/py_winreg.c | 82 ---- source/python/samba/.cvsignore | 1 - source/python/samba/printerdata.py | 59 --- source/script/creategroup | 27 -- source/script/findstatic.pl | 70 --- source/script/installdat.sh | 23 - source/script/mkinstalldirs | 38 -- source/script/uninstallmodules.sh | 37 -- source/smbwrapper/smbw_cache.c | 207 --------- source/tdb/tdb.magic | 10 - source/tdb/tdbutil.h | 37 -- source/tests/shlib.c | 6 - source/tests/unixsock.c | 93 ---- source/torture/samtest.h | 38 -- source/utils/.cvsignore | 1 - source/web/neg_lang.c | 117 ----- source/wrepld/parser.c | 759 ------------------------------- source/wrepld/partners.c | 200 -------- source/wrepld/socket.c | 69 --- 54 files changed, 5048 deletions(-) delete mode 100644 .cvsignore delete mode 100644 source/auth/auth_compat.c delete mode 100644 source/codepages/lowcase.dat delete mode 100644 source/codepages/upcase.dat delete mode 100644 source/codepages/valid.dat delete mode 100644 source/include/hmacmd5.h delete mode 100644 source/include/intl.h delete mode 100644 source/include/libsmb_internal.h delete mode 100644 source/include/md5.h delete mode 100644 source/include/nt_status.h delete mode 100644 source/include/pstring.h delete mode 100644 source/include/session.h delete mode 100644 source/intl/.cvsignore delete mode 100644 source/intl/linux-msg.sed delete mode 100644 source/lib/hmacmd5.c delete mode 100644 source/lib/md5.c delete mode 100644 source/lib/util_pw.c delete mode 100644 source/lib/util_smbd.c delete mode 100644 source/libads/.cvsignore delete mode 100644 source/libads/ads_status.c delete mode 100644 source/libads/kerberos.c delete mode 100644 source/libsmb/libsmb_compat.c delete mode 100644 source/nsswitch/winbind_client.h delete mode 100644 source/passdb/.cvsignore delete mode 100644 source/passdb/pdb_compat.c delete mode 100644 source/python/.cvsignore delete mode 100644 source/python/README delete mode 100755 source/python/gprinterdata delete mode 100755 source/python/gtdbtool delete mode 100755 source/python/gtkdictbrowser.py delete mode 100644 source/python/py_spoolss_drivers_conv.c delete mode 100644 source/python/py_spoolss_jobs.c delete mode 100644 source/python/py_spoolss_jobs_conv.c delete mode 100644 source/python/py_spoolss_ports_conv.c delete mode 100644 source/python/py_spoolss_printers_conv.c delete mode 100644 source/python/py_winreg.c delete mode 100644 source/python/samba/.cvsignore delete mode 100644 source/python/samba/printerdata.py delete mode 100755 source/script/creategroup delete mode 100755 source/script/findstatic.pl delete mode 100755 source/script/installdat.sh delete mode 100755 source/script/mkinstalldirs delete mode 100755 source/script/uninstallmodules.sh delete mode 100644 source/smbwrapper/smbw_cache.c delete mode 100644 source/tdb/tdb.magic delete mode 100644 source/tdb/tdbutil.h delete mode 100644 source/tests/shlib.c delete mode 100644 source/tests/unixsock.c delete mode 100644 source/torture/samtest.h delete mode 100644 source/utils/.cvsignore delete mode 100644 source/web/neg_lang.c delete mode 100644 source/wrepld/parser.c delete mode 100644 source/wrepld/partners.c delete mode 100644 source/wrepld/socket.c diff --git a/.cvsignore b/.cvsignore deleted file mode 100644 index 30433041802..00000000000 --- a/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -ID -testtmp diff --git a/source/auth/auth_compat.c b/source/auth/auth_compat.c deleted file mode 100644 index a70f1e98b72..00000000000 --- a/source/auth/auth_compat.c +++ /dev/null @@ -1,122 +0,0 @@ -/* - Unix SMB/CIFS implementation. - Password and authentication handling - Copyright (C) Andrew Bartlett 2001-2002 - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "includes.h" - -#undef DBGC_CLASS -#define DBGC_CLASS DBGC_AUTH - -/**************************************************************************** - COMPATIBILITY INTERFACES: - ***************************************************************************/ - -/**************************************************************************** -check if a username/password is OK assuming the password is a 24 byte -SMB hash -return True if the password is correct, False otherwise -****************************************************************************/ - -NTSTATUS check_plaintext_password(const char *smb_name, DATA_BLOB plaintext_password, auth_serversupplied_info **server_info) -{ - struct auth_context *plaintext_auth_context = NULL; - auth_usersupplied_info *user_info = NULL; - const uint8 *chal; - NTSTATUS nt_status; - if (!NT_STATUS_IS_OK(nt_status = make_auth_context_subsystem(&plaintext_auth_context))) { - return nt_status; - } - - chal = plaintext_auth_context->get_ntlm_challenge(plaintext_auth_context); - - if (!make_user_info_for_reply(&user_info, - smb_name, lp_workgroup(), chal, - plaintext_password)) { - return NT_STATUS_NO_MEMORY; - } - - nt_status = plaintext_auth_context->check_ntlm_password(plaintext_auth_context, - user_info, server_info); - - (plaintext_auth_context->free)(&plaintext_auth_context); - free_user_info(&user_info); - return nt_status; -} - -static NTSTATUS pass_check_smb(const char *smb_name, - const char *domain, - DATA_BLOB lm_pwd, - DATA_BLOB nt_pwd, - DATA_BLOB plaintext_password, - BOOL encrypted) - -{ - NTSTATUS nt_status; - extern struct auth_context *negprot_global_auth_context; - auth_serversupplied_info *server_info = NULL; - if (encrypted) { - auth_usersupplied_info *user_info = NULL; - make_user_info_for_reply_enc(&user_info, smb_name, - domain, - lm_pwd, - nt_pwd); - nt_status = negprot_global_auth_context->check_ntlm_password(negprot_global_auth_context, - user_info, &server_info); - free_user_info(&user_info); - } else { - nt_status = check_plaintext_password(smb_name, plaintext_password, &server_info); - } - free_server_info(&server_info); - return nt_status; -} - -/**************************************************************************** -check if a username/password pair is ok via the auth subsystem. -return True if the password is correct, False otherwise -****************************************************************************/ -BOOL password_ok(char *smb_name, DATA_BLOB password_blob) -{ - - DATA_BLOB null_password = data_blob(NULL, 0); - extern BOOL global_encrypted_passwords_negotiated; - BOOL encrypted = (global_encrypted_passwords_negotiated && password_blob.length == 24); - - if (encrypted) { - /* - * The password could be either NTLM or plain LM. Try NTLM first, - * but fall-through as required. - * NTLMv2 makes no sense here. - */ - if (NT_STATUS_IS_OK(pass_check_smb(smb_name, lp_workgroup(), null_password, password_blob, null_password, encrypted))) { - return True; - } - - if (NT_STATUS_IS_OK(pass_check_smb(smb_name, lp_workgroup(), password_blob, null_password, null_password, encrypted))) { - return True; - } - } else { - if (NT_STATUS_IS_OK(pass_check_smb(smb_name, lp_workgroup(), null_password, null_password, password_blob, encrypted))) { - return True; - } - } - - return False; -} - - diff --git a/source/codepages/lowcase.dat b/source/codepages/lowcase.dat deleted file mode 100644 index 62b6e2e952b47c92d6a62c6a4079e52af112a359..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcwPel00001 literal 131072 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 diff --git a/source/codepages/upcase.dat b/source/codepages/upcase.dat deleted file mode 100644 index bb6f9beb4e32948bc4d2367b377d41d9ae017e5a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcwPel00001 literal 131072 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 iel6?2imyxF|EjfEEdC+9`y=o7@Z0?F 2001 - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -/* a "session" is claimed when we do a SessionSetupX operation - and is yielded when the corresponding vuid is destroyed. - - sessions are used to populate utmp and PAM session structures -*/ - -struct sessionid { - uid_t uid; - gid_t gid; - fstring username; - fstring hostname; - fstring netbios_name; - fstring remote_machine; - fstring id_str; - uint32 id_num; - uint32 pid; - fstring ip_addr; -}; - diff --git a/source/intl/.cvsignore b/source/intl/.cvsignore deleted file mode 100644 index 5f2a5c4cf75..00000000000 --- a/source/intl/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -*.po -*.po32 diff --git a/source/intl/linux-msg.sed b/source/intl/linux-msg.sed deleted file mode 100644 index 5918e720a9a..00000000000 --- a/source/intl/linux-msg.sed +++ /dev/null @@ -1,100 +0,0 @@ -# po2msg.sed - Convert Uniforum style .po file to Linux style .msg file -# Copyright (C) 1995 Free Software Foundation, Inc. -# Ulrich Drepper , 1995. -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# -# The first directive in the .msg should be the definition of the -# message set number. We use always set number 1. -# -1 { - i\ -$set 1 # Automatically created by po2msg.sed - h - s/.*/0/ - x -} -# -# Mitch's old catalog format does not allow comments. -# -# We copy the original message as a comment into the .msg file. -# -/^msgid/ { - s/msgid[ ]*"// -# -# This does not work now with the new format. -# /"$/! { -# s/\\$// -# s/$/ ... (more lines following)"/ -# } - x -# The following nice solution is by -# Bruno - td -# Increment a decimal number in pattern space. -# First hide trailing `9' digits. - :d - s/9\(_*\)$/_\1/ - td -# Assure at least one digit is available. - s/^\(_*\)$/0\1/ -# Increment the last digit. - s/8\(_*\)$/9\1/ - s/7\(_*\)$/8\1/ - s/6\(_*\)$/7\1/ - s/5\(_*\)$/6\1/ - s/4\(_*\)$/5\1/ - s/3\(_*\)$/4\1/ - s/2\(_*\)$/3\1/ - s/1\(_*\)$/2\1/ - s/0\(_*\)$/1\1/ -# Convert the hidden `9' digits to `0's. - s/_/0/g - x - G - s/\(.*\)"\n\([0-9]*\)/$ #\2 Original Message:(\1)/p -} -# -# The .msg file contains, other then the .po file, only the translations -# but each given a unique ID. Starting from 1 and incrementing by 1 for -# each message we assign them to the messages. -# It is important that the .po file used to generate the cat-id-tbl.c file -# (with po-to-tbl) is the same as the one used here. (At least the order -# of declarations must not be changed.) -# -/^msgstr/ { - s/msgstr[ ]*"\(.*\)"/# \1/ -# Clear substitution flag. - tb -# Append the next line. - :b - N -# Look whether second part is continuation line. - s/\(.*\n\)"\(.*\)"/\1\2/ -# Yes, then branch. - ta - P - D -# Note that D includes a jump to the start!! -# We found a continuation line. But before printing insert '\'. - :a - s/\(.*\)\(\n.*\)/\1\\\2/ - P -# We cannot use D here. - s/.*\n\(.*\)/\1/ - tb -} -d diff --git a/source/lib/hmacmd5.c b/source/lib/hmacmd5.c deleted file mode 100644 index f436fd30c0e..00000000000 --- a/source/lib/hmacmd5.c +++ /dev/null @@ -1,134 +0,0 @@ -/* - Unix SMB/CIFS implementation. - HMAC MD5 code for use in NTLMv2 - Copyright (C) Luke Kenneth Casson Leighton 1996-2000 - Copyright (C) Andrew Tridgell 1992-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 - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -/* taken direct from rfc2104 implementation and modified for suitable use - * for ntlmv2. - */ - -#include "includes.h" - -/*********************************************************************** - the rfc 2104 version of hmac_md5 initialisation. -***********************************************************************/ -void hmac_md5_init_rfc2104(uchar* key, int key_len, HMACMD5Context *ctx) -{ - int i; - - /* if key is longer than 64 bytes reset it to key=MD5(key) */ - if (key_len > 64) - { - uchar tk[16]; - struct MD5Context tctx; - - MD5Init(&tctx); - MD5Update(&tctx, key, key_len); - MD5Final(tk, &tctx); - - key = tk; - key_len = 16; - } - - /* start out by storing key in pads */ - ZERO_STRUCT(ctx->k_ipad); - ZERO_STRUCT(ctx->k_opad); - memcpy( ctx->k_ipad, key, key_len); - memcpy( ctx->k_opad, key, key_len); - - /* XOR key with ipad and opad values */ - for (i=0; i<64; i++) - { - ctx->k_ipad[i] ^= 0x36; - ctx->k_opad[i] ^= 0x5c; - } - - MD5Init(&ctx->ctx); - MD5Update(&ctx->ctx, ctx->k_ipad, 64); -} - -/*********************************************************************** - the microsoft version of hmac_md5 initialisation. -***********************************************************************/ -void hmac_md5_init_limK_to_64(const uchar* key, int key_len, - HMACMD5Context *ctx) -{ - int i; - - /* if key is longer than 64 bytes truncate it */ - if (key_len > 64) - { - key_len = 64; - } - - /* start out by storing key in pads */ - ZERO_STRUCT(ctx->k_ipad); - ZERO_STRUCT(ctx->k_opad); - memcpy( ctx->k_ipad, key, key_len); - memcpy( ctx->k_opad, key, key_len); - - /* XOR key with ipad and opad values */ - for (i=0; i<64; i++) { - ctx->k_ipad[i] ^= 0x36; - ctx->k_opad[i] ^= 0x5c; - } - - MD5Init(&ctx->ctx); - MD5Update(&ctx->ctx, ctx->k_ipad, 64); -} - -/*********************************************************************** - update hmac_md5 "inner" buffer -***********************************************************************/ -void hmac_md5_update(const uchar* text, int text_len, HMACMD5Context *ctx) -{ - MD5Update(&ctx->ctx, text, text_len); /* then text of datagram */ -} - -/*********************************************************************** - finish off hmac_md5 "inner" buffer and generate outer one. -***********************************************************************/ -void hmac_md5_final(uchar *digest, HMACMD5Context *ctx) - -{ - struct MD5Context ctx_o; - - MD5Final(digest, &ctx->ctx); - - MD5Init(&ctx_o); - MD5Update(&ctx_o, ctx->k_opad, 64); - MD5Update(&ctx_o, digest, 16); - MD5Final(digest, &ctx_o); -} - -/*********************************************************** - single function to calculate an HMAC MD5 digest from data. - use the microsoft hmacmd5 init method because the key is 16 bytes. -************************************************************/ -void hmac_md5( uchar key[16], uchar* data, int data_len, uchar* digest) -{ - HMACMD5Context ctx; - hmac_md5_init_limK_to_64(key, 16, &ctx); - if (data_len != 0) - { - hmac_md5_update(data, data_len, &ctx); - } - hmac_md5_final(digest, &ctx); -} - diff --git a/source/lib/md5.c b/source/lib/md5.c deleted file mode 100644 index 2121b170479..00000000000 --- a/source/lib/md5.c +++ /dev/null @@ -1,247 +0,0 @@ -/* - * This code implements the MD5 message-digest algorithm. - * The algorithm is due to Ron Rivest. This code was - * written by Colin Plumb in 1993, no copyright is claimed. - * This code is in the public domain; do with it what you wish. - * - * Equivalent code is available from RSA Data Security, Inc. - * This code has been tested against that, and is equivalent, - * except that you don't need to include two pages of legalese - * with every copy. - * - * To compute the message digest of a chunk of bytes, declare an - * MD5Context structure, pass it to MD5Init, call MD5Update as - * needed on buffers full of bytes, and then call MD5Final, which - * will fill a supplied 16-byte array with the digest. - */ - -/* This code slightly modified to fit into Samba by - abartlet@samba.org Jun 2001 */ - -#include "includes.h" - -#include "md5.h" - -static void MD5Transform(uint32 buf[4], uint32 const in[16]); - -/* - * Note: this code is harmless on little-endian machines. - */ -static void byteReverse(unsigned char *buf, unsigned longs) -{ - uint32 t; - do { - t = (uint32) ((unsigned) buf[3] << 8 | buf[2]) << 16 | - ((unsigned) buf[1] << 8 | buf[0]); - *(uint32 *) buf = t; - buf += 4; - } while (--longs); -} - -/* - * Start MD5 accumulation. Set bit count to 0 and buffer to mysterious - * initialization constants. - */ -void MD5Init(struct MD5Context *ctx) -{ - ctx->buf[0] = 0x67452301; - ctx->buf[1] = 0xefcdab89; - ctx->buf[2] = 0x98badcfe; - ctx->buf[3] = 0x10325476; - - ctx->bits[0] = 0; - ctx->bits[1] = 0; -} - -/* - * Update context to reflect the concatenation of another buffer full - * of bytes. - */ -void MD5Update(struct MD5Context *ctx, unsigned char const *buf, unsigned len) -{ - register uint32 t; - - /* Update bitcount */ - - t = ctx->bits[0]; - if ((ctx->bits[0] = t + ((uint32) len << 3)) < t) - ctx->bits[1]++; /* Carry from low to high */ - ctx->bits[1] += len >> 29; - - t = (t >> 3) & 0x3f; /* Bytes already in shsInfo->data */ - - /* Handle any leading odd-sized chunks */ - - if (t) { - unsigned char *p = (unsigned char *) ctx->in + t; - - t = 64 - t; - if (len < t) { - memmove(p, buf, len); - return; - } - memmove(p, buf, t); - byteReverse(ctx->in, 16); - MD5Transform(ctx->buf, (uint32 *) ctx->in); - buf += t; - len -= t; - } - /* Process data in 64-byte chunks */ - - while (len >= 64) { - memmove(ctx->in, buf, 64); - byteReverse(ctx->in, 16); - MD5Transform(ctx->buf, (uint32 *) ctx->in); - buf += 64; - len -= 64; - } - - /* Handle any remaining bytes of data. */ - - memmove(ctx->in, buf, len); -} - -/* - * Final wrapup - pad to 64-byte boundary with the bit pattern - * 1 0* (64-bit count of bits processed, MSB-first) - */ -void MD5Final(unsigned char digest[16], struct MD5Context *ctx) -{ - unsigned int count; - unsigned char *p; - - /* Compute number of bytes mod 64 */ - count = (ctx->bits[0] >> 3) & 0x3F; - - /* Set the first char of padding to 0x80. This is safe since there is - always at least one byte free */ - p = ctx->in + count; - *p++ = 0x80; - - /* Bytes of padding needed to make 64 bytes */ - count = 64 - 1 - count; - - /* Pad out to 56 mod 64 */ - if (count < 8) { - /* Two lots of padding: Pad the first block to 64 bytes */ - memset(p, 0, count); - byteReverse(ctx->in, 16); - MD5Transform(ctx->buf, (uint32 *) ctx->in); - - /* Now fill the next block with 56 bytes */ - memset(ctx->in, 0, 56); - } else { - /* Pad block to 56 bytes */ - memset(p, 0, count - 8); - } - byteReverse(ctx->in, 14); - - /* Append length in bits and transform */ - ((uint32 *) ctx->in)[14] = ctx->bits[0]; - ((uint32 *) ctx->in)[15] = ctx->bits[1]; - - MD5Transform(ctx->buf, (uint32 *) ctx->in); - byteReverse((unsigned char *) ctx->buf, 4); - memmove(digest, ctx->buf, 16); - memset(ctx, 0, sizeof(ctx)); /* In case it's sensitive */ -} - -/* The four core functions - F1 is optimized somewhat */ - -/* #define F1(x, y, z) (x & y | ~x & z) */ -#define F1(x, y, z) (z ^ (x & (y ^ z))) -#define F2(x, y, z) F1(z, x, y) -#define F3(x, y, z) (x ^ y ^ z) -#define F4(x, y, z) (y ^ (x | ~z)) - -/* This is the central step in the MD5 algorithm. */ -#define MD5STEP(f, w, x, y, z, data, s) \ - ( w += f(x, y, z) + data, w = w<>(32-s), w += x ) - -/* - * The core of the MD5 algorithm, this alters an existing MD5 hash to - * reflect the addition of 16 longwords of new data. MD5Update blocks - * the data and converts bytes into longwords for this routine. - */ -static void MD5Transform(uint32 buf[4], uint32 const in[16]) -{ - register uint32 a, b, c, d; - - a = buf[0]; - b = buf[1]; - c = buf[2]; - d = buf[3]; - - MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7); - MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12); - MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17); - MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22); - MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7); - MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12); - MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17); - MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22); - MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7); - MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12); - MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17); - MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22); - MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7); - MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12); - MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17); - MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22); - - MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5); - MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9); - MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14); - MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20); - MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5); - MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9); - MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14); - MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20); - MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5); - MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9); - MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14); - MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20); - MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5); - MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9); - MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14); - MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20); - - MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4); - MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11); - MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16); - MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23); - MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4); - MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11); - MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16); - MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23); - MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4); - MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11); - MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16); - MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23); - MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4); - MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11); - MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16); - MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23); - - MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6); - MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10); - MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15); - MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21); - MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6); - MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10); - MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15); - MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21); - MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6); - MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10); - MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15); - MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21); - MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6); - MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10); - MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15); - MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21); - - buf[0] += a; - buf[1] += b; - buf[2] += c; - buf[3] += d; -} diff --git a/source/lib/util_pw.c b/source/lib/util_pw.c deleted file mode 100644 index 9d075a05e88..00000000000 --- a/source/lib/util_pw.c +++ /dev/null @@ -1,89 +0,0 @@ -/* - Unix SMB/CIFS implementation. - - Safe versions of getpw* calls - - Copyright (C) Andrew Bartlett 2002 - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "includes.h" - -static struct passwd *alloc_copy_passwd(const struct passwd *from) -{ - struct passwd *ret = smb_xmalloc(sizeof(struct passwd)); - ZERO_STRUCTP(ret); - ret->pw_name = smb_xstrdup(from->pw_name); - ret->pw_passwd = smb_xstrdup(from->pw_passwd); - ret->pw_uid = from->pw_uid; - ret->pw_gid = from->pw_gid; - ret->pw_gecos = smb_xstrdup(from->pw_gecos); - ret->pw_dir = smb_xstrdup(from->pw_dir); - ret->pw_shell = smb_xstrdup(from->pw_shell); - return ret; -} - -void passwd_free (struct passwd **buf) -{ - if (!*buf) { - DEBUG(0, ("attempted double-free of allocated passwd\n")); - return; - } - - SAFE_FREE((*buf)->pw_name); - SAFE_FREE((*buf)->pw_passwd); - SAFE_FREE((*buf)->pw_gecos); - SAFE_FREE((*buf)->pw_dir); - SAFE_FREE((*buf)->pw_shell); - - SAFE_FREE(*buf); -} - -struct passwd *getpwnam_alloc(const char *name) -{ - struct passwd *temp; - - temp = sys_getpwnam(name); - - if (!temp) { -#if 0 - if (errno == ENOMEM) { - /* what now? */ - } -#endif - return NULL; - } - - return alloc_copy_passwd(temp); -} - -struct passwd *getpwuid_alloc(uid_t uid) -{ - struct passwd *temp; - - temp = sys_getpwuid(uid); - - if (!temp) { -#if 0 - if (errno == ENOMEM) { - /* what now? */ - } -#endif - return NULL; - } - - return alloc_copy_passwd(temp); -} diff --git a/source/lib/util_smbd.c b/source/lib/util_smbd.c deleted file mode 100644 index 071f20b4162..00000000000 --- a/source/lib/util_smbd.c +++ /dev/null @@ -1,65 +0,0 @@ -/* - Unix SMB/CIFS implementation. - Samba utility functions, used in smbd only - Copyright (C) Andrew Tridgell 2002 - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "includes.h" - -/* - This function requires sys_getgrouplist - which is only - available in smbd due to it's use of become_root() in a - legacy systems hack. -*/ - -/* - return a full list of groups for a user - - returns the number of groups the user is a member of. The return will include the - users primary group. - - remember to free the resulting gid_t array - - NOTE! uses become_root() to gain correct priviages on systems - that lack a native getgroups() call (uses initgroups and getgroups) -*/ -int getgroups_user(const char *user, gid_t **groups) -{ - struct passwd *pwd; - int ngrp, max_grp; - - pwd = getpwnam_alloc(user); - if (!pwd) return -1; - - max_grp = groups_max(); - (*groups) = (gid_t *)malloc(sizeof(gid_t) * max_grp); - if (! *groups) { - passwd_free(&pwd); - errno = ENOMEM; - return -1; - } - - ngrp = sys_getgrouplist(user, pwd->pw_gid, *groups, &max_grp); - if (ngrp <= 0) { - passwd_free(&pwd); - free(*groups); - return ngrp; - } - - passwd_free(&pwd); - return ngrp; -} diff --git a/source/libads/.cvsignore b/source/libads/.cvsignore deleted file mode 100644 index 5f2a5c4cf75..00000000000 --- a/source/libads/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -*.po -*.po32 diff --git a/source/libads/ads_status.c b/source/libads/ads_status.c deleted file mode 100644 index 80fdb99eac0..00000000000 --- a/source/libads/ads_status.c +++ /dev/null @@ -1,133 +0,0 @@ -/* - Unix SMB/CIFS implementation. - ads (active directory) utility library - Copyright (C) Andrew Tridgell 2001 - Copyright (C) Remus Koos 2001 - Copyright (C) Andrew Bartlett 2001 - - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "includes.h" - -/* - build a ADS_STATUS structure -*/ -ADS_STATUS ads_build_error(enum ads_error_type etype, - int rc, int minor_status) -{ - ADS_STATUS ret; - - if (etype == ADS_ERROR_NT) { - DEBUG(0,("don't use ads_build_error with ADS_ERROR_NT!\n")); - ret.err.rc = -1; - ret.error_type = ADS_ERROR_SYSTEM; - ret.minor_status = 0; - return ret; - } - - ret.err.rc = rc; - ret.error_type = etype; - ret.minor_status = minor_status; - return ret; -} - -ADS_STATUS ads_build_nt_error(enum ads_error_type etype, - NTSTATUS nt_status) -{ - ADS_STATUS ret; - - if (etype != ADS_ERROR_NT) { - DEBUG(0,("don't use ads_build_nt_error without ADS_ERROR_NT!\n")); - ret.err.rc = -1; - ret.error_type = ADS_ERROR_SYSTEM; - ret.minor_status = 0; - return ret; - } - ret.err.nt_status = nt_status; - ret.error_type = etype; - ret.minor_status = 0; - return ret; -} - -/* - do a rough conversion between ads error codes and NT status codes - we'll need to fill this in more -*/ -NTSTATUS ads_ntstatus(ADS_STATUS status) -{ - if (status.error_type == ADS_ERROR_NT){ - return status.err.nt_status; - } -#ifdef HAVE_LDAP - if ((status.error_type == ADS_ERROR_LDAP) - && (status.err.rc == LDAP_NO_MEMORY)) { - return NT_STATUS_NO_MEMORY; - } -#endif - if (ADS_ERR_OK(status)) return NT_STATUS_OK; - return NT_STATUS_UNSUCCESSFUL; -} - -/* - return a string for an error from a ads routine -*/ -const char *ads_errstr(ADS_STATUS status) -{ - int msg_ctx; - static char *ret; - - SAFE_FREE(ret); - msg_ctx = 0; - - switch (status.error_type) { - case ADS_ERROR_SYSTEM: - return strerror(status.err.rc); -#ifdef HAVE_LDAP - case ADS_ERROR_LDAP: - return ldap_err2string(status.err.rc); -#endif -#ifdef HAVE_KRB5 - case ADS_ERROR_KRB5: - return error_message(status.err.rc); -#endif -#ifdef HAVE_GSSAPI - case ADS_ERROR_GSS: - { - uint32 minor; - - gss_buffer_desc msg1, msg2; - msg1.value = NULL; - msg2.value = NULL; - gss_display_status(&minor, status.err.rc, GSS_C_GSS_CODE, - GSS_C_NULL_OID, &msg_ctx, &msg1); - gss_display_status(&minor, status.minor_status, GSS_C_MECH_CODE, - GSS_C_NULL_OID, &msg_ctx, &msg2); - asprintf(&ret, "%s : %s", (char *)msg1.value, (char *)msg2.value); - gss_release_buffer(&minor, &msg1); - gss_release_buffer(&minor, &msg2); - return ret; - } -#endif - case ADS_ERROR_NT: - return nt_errstr(ads_ntstatus(status)); - default: - return "Unknown ADS error type!? (not compiled in?)"; - } - -} - - diff --git a/source/libads/kerberos.c b/source/libads/kerberos.c deleted file mode 100644 index bef2febaefd..00000000000 --- a/source/libads/kerberos.c +++ /dev/null @@ -1,140 +0,0 @@ -/* - Unix SMB/CIFS implementation. - kerberos utility library - Copyright (C) Andrew Tridgell 2001 - Copyright (C) Remus Koos 2001 - - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "includes.h" - -#ifdef HAVE_KRB5 - -/* - we use a prompter to avoid a crash bug in the kerberos libs when - dealing with empty passwords - this prompter is just a string copy ... -*/ -static krb5_error_code -kerb_prompter(krb5_context ctx, void *data, - const char *name, - const char *banner, - int num_prompts, - krb5_prompt prompts[]) -{ - if (num_prompts == 0) return 0; - - memset(prompts[0].reply->data, 0, prompts[0].reply->length); - if (prompts[0].reply->length > 0) { - if (data) { - strncpy(prompts[0].reply->data, data, prompts[0].reply->length-1); - prompts[0].reply->length = strlen(prompts[0].reply->data); - } else { - prompts[0].reply->length = 0; - } - } - return 0; -} - -/* - simulate a kinit, putting the tgt in the default cache location - remus@snapserver.com -*/ -int kerberos_kinit_password(const char *principal, const char *password, int time_offset) -{ - krb5_context ctx; - krb5_error_code code = 0; - krb5_ccache cc; - krb5_principal me; - krb5_creds my_creds; - - if ((code = krb5_init_context(&ctx))) - return code; - - if (time_offset != 0) { - krb5_set_real_time(ctx, time(NULL) + time_offset, 0); - } - - if ((code = krb5_cc_default(ctx, &cc))) { - krb5_free_context(ctx); - return code; - } - - if ((code = krb5_parse_name(ctx, principal, &me))) { - krb5_free_context(ctx); - return code; - } - - if ((code = krb5_get_init_creds_password(ctx, &my_creds, me, NULL, - kerb_prompter, - password, 0, NULL, NULL))) { - krb5_free_principal(ctx, me); - krb5_free_context(ctx); - return code; - } - - if ((code = krb5_cc_initialize(ctx, cc, me))) { - krb5_free_cred_contents(ctx, &my_creds); - krb5_free_principal(ctx, me); - krb5_free_context(ctx); - return code; - } - - if ((code = krb5_cc_store_cred(ctx, cc, &my_creds))) { - krb5_cc_close(ctx, cc); - krb5_free_cred_contents(ctx, &my_creds); - krb5_free_principal(ctx, me); - krb5_free_context(ctx); - return code; - } - - krb5_cc_close(ctx, cc); - krb5_free_cred_contents(ctx, &my_creds); - krb5_free_principal(ctx, me); - krb5_free_context(ctx); - - return 0; -} - - - -/* run kinit to setup our ccache */ -int ads_kinit_password(ADS_STRUCT *ads) -{ - char *s; - int ret; - - if (asprintf(&s, "%s@%s", ads->auth.user_name, ads->auth.realm) == -1) { - return KRB5_CC_NOMEM; - } - - if (!ads->auth.password) { - return KRB5_LIBOS_CANTREADPWD; - } - - ret = kerberos_kinit_password(s, ads->auth.password, ads->auth.time_offset); - - if (ret) { - DEBUG(0,("kerberos_kinit_password %s failed: %s\n", - s, error_message(ret))); - } - free(s); - return ret; -} - - -#endif diff --git a/source/libsmb/libsmb_compat.c b/source/libsmb/libsmb_compat.c deleted file mode 100644 index 27b274953ab..00000000000 --- a/source/libsmb/libsmb_compat.c +++ /dev/null @@ -1,281 +0,0 @@ -/* - Unix SMB/CIFS implementation. - SMB client library implementation (Old interface compatibility) - Copyright (C) Andrew Tridgell 1998 - Copyright (C) Richard Sharpe 2000 - Copyright (C) John Terpstra 2000 - Copyright (C) Tom Jansen (Ninja ISD) 2002 - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - - -#include "includes.h" - -#include "../include/libsmb_internal.h" - -struct smbc_compat_fdlist { - SMBCFILE * file; - int fd; - struct smbc_compat_fdlist *next, *prev; -}; - -static SMBCCTX * statcont = NULL; -static int smbc_compat_initialized = 0; -static int smbc_currentfd = 10000; -static struct smbc_compat_fdlist * smbc_compat_fdlist = NULL; - - -/* Find an fd and return the SMBCFILE * or NULL on failure */ -static SMBCFILE * find_fd(int fd) -{ - struct smbc_compat_fdlist * f = smbc_compat_fdlist; - while (f) { - if (f->fd == fd) - return f->file; - f = f->next; - } - return NULL; -} - -/* Add an fd, returns 0 on success, -1 on error with errno set */ -static int add_fd(SMBCFILE * file) -{ - struct smbc_compat_fdlist * f = malloc(sizeof(struct smbc_compat_fdlist)); - if (!f) { - errno = ENOMEM; - return -1; - } - - f->fd = smbc_currentfd++; - f->file = file; - - DLIST_ADD(smbc_compat_fdlist, f); - - return f->fd; -} - - - -/* Delete an fd, returns 0 on success */ -static int del_fd(int fd) -{ - struct smbc_compat_fdlist * f = smbc_compat_fdlist; - while (f) { - if (f->fd == fd) - break; - f = f->next; - } - if (f) { - /* found */ - DLIST_REMOVE(smbc_compat_fdlist, f); - SAFE_FREE(f); - return 0; - } - return 1; -} - - - -int smbc_init(smbc_get_auth_data_fn fn, int debug) -{ - if (!smbc_compat_initialized) { - statcont = smbc_new_context(); - if (!statcont) - return -1; - - statcont->debug = debug; - statcont->callbacks.auth_fn = fn; - - if (!smbc_init_context(statcont)) { - smbc_free_context(statcont, False); - return -1; - } - - smbc_compat_initialized = 1; - - return 0; - } - return 0; -} - - -int smbc_open(const char *furl, int flags, mode_t mode) -{ - SMBCFILE * file; - int fd; - - file = statcont->open(statcont, furl, flags, mode); - if (!file) - return -1; - - fd = add_fd(file); - if (fd == -1) - statcont->close(statcont, file); - return fd; -} - - -int smbc_creat(const char *furl, mode_t mode) -{ - SMBCFILE * file; - int fd; - - file = statcont->creat(statcont, furl, mode); - if (!file) - return -1; - - fd = add_fd(file); - if (fd == -1) { - /* Hmm... should we delete the file too ? I guess we could try */ - statcont->close(statcont, file); - statcont->unlink(statcont, furl); - } - return fd; -} - - -ssize_t smbc_read(int fd, void *buf, size_t bufsize) -{ - SMBCFILE * file = find_fd(fd); - return statcont->read(statcont, file, buf, bufsize); -} - -ssize_t smbc_write(int fd, void *buf, size_t bufsize) -{ - SMBCFILE * file = find_fd(fd); - return statcont->write(statcont, file, buf, bufsize); -} - -off_t smbc_lseek(int fd, off_t offset, int whence) -{ - SMBCFILE * file = find_fd(fd); - return statcont->lseek(statcont, file, offset, whence); -} - -int smbc_close(int fd) -{ - SMBCFILE * file = find_fd(fd); - del_fd(fd); - return statcont->close(statcont, file); -} - -int smbc_unlink(const char *fname) -{ - return statcont->unlink(statcont, fname); -} - -int smbc_rename(const char *ourl, const char *nurl) -{ - return statcont->rename(statcont, ourl, statcont, nurl); -} - -int smbc_opendir(const char *durl) -{ - SMBCFILE * file; - int fd; - - file = statcont->opendir(statcont, durl); - if (!file) - return -1; - - fd = add_fd(file); - if (fd == -1) - statcont->closedir(statcont, file); - - return fd; -} - -int smbc_closedir(int dh) -{ - SMBCFILE * file = find_fd(dh); - del_fd(dh); - return statcont->closedir(statcont, file); -} - -int smbc_getdents(unsigned int dh, struct smbc_dirent *dirp, int count) -{ - SMBCFILE * file = find_fd(dh); - return statcont->getdents(statcont, file,dirp, count); -} - -struct smbc_dirent* smbc_readdir(unsigned int dh) -{ - SMBCFILE * file = find_fd(dh); - return statcont->readdir(statcont, file); -} - -off_t smbc_telldir(int dh) -{ - SMBCFILE * file = find_fd(dh); - return statcont->telldir(statcont, file); -} - -int smbc_lseekdir(int fd, off_t offset) -{ - SMBCFILE * file = find_fd(fd); - return statcont->lseekdir(statcont, file, offset); -} - -int smbc_mkdir(const char *durl, mode_t mode) -{ - return statcont->mkdir(statcont, durl, mode); -} - -int smbc_rmdir(const char *durl) -{ - return statcont->rmdir(statcont, durl); -} - -int smbc_stat(const char *url, struct stat *st) -{ - return statcont->stat(statcont, url, st); -} - -int smbc_fstat(int fd, struct stat *st) -{ - SMBCFILE * file = find_fd(fd); - return statcont->fstat(statcont, file, st); -} - -int smbc_chmod(const char *url, mode_t mode) -{ - /* NOT IMPLEMENTED IN LIBSMBCLIENT YET */ - return -1; -} - -int smbc_print_file(const char *fname, const char *printq) -{ - return statcont->print_file(statcont, fname, statcont, printq); -} - -int smbc_open_print_job(const char *fname) -{ - SMBCFILE * file = statcont->open_print_job(statcont, fname); - if (!file) return -1; - return (int) file; -} - -int smbc_list_print_jobs(const char *purl, smbc_list_print_job_fn fn) -{ - return statcont->list_print_jobs(statcont, purl, fn); -} - -int smbc_unlink_print_job(const char *purl, int id) -{ - return statcont->unlink_print_job(statcont, purl, id); -} - - diff --git a/source/nsswitch/winbind_client.h b/source/nsswitch/winbind_client.h deleted file mode 100644 index 4de2d57cc7d..00000000000 --- a/source/nsswitch/winbind_client.h +++ /dev/null @@ -1,16 +0,0 @@ -#include "winbind_nss_config.h" -#include "winbindd_nss.h" - -void init_request(struct winbindd_request *req,int rq_type); -NSS_STATUS winbindd_send_request(int req_type, - struct winbindd_request *request); -NSS_STATUS winbindd_get_response(struct winbindd_response *response); -NSS_STATUS winbindd_request(int req_type, - struct winbindd_request *request, - struct winbindd_response *response); -int winbind_open_pipe_sock(void); -int write_sock(void *buffer, int count); -int read_reply(struct winbindd_response *response); -void close_sock(void); -void free_response(struct winbindd_response *response); - diff --git a/source/passdb/.cvsignore b/source/passdb/.cvsignore deleted file mode 100644 index 5f2a5c4cf75..00000000000 --- a/source/passdb/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -*.po -*.po32 diff --git a/source/passdb/pdb_compat.c b/source/passdb/pdb_compat.c deleted file mode 100644 index abd572a7c14..00000000000 --- a/source/passdb/pdb_compat.c +++ /dev/null @@ -1,104 +0,0 @@ -/* - Unix SMB/CIFS implementation. - SAM_ACCOUNT access routines - Copyright (C) Jeremy Allison 1996-2001 - Copyright (C) Luke Kenneth Casson Leighton 1996-1998 - Copyright (C) Gerald (Jerry) Carter 2000-2001 - Copyright (C) Andrew Bartlett 2001-2002 - Copyright (C) Stefan (metze) Metzmacher 2002 - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "includes.h" - -#undef DBGC_CLASS -#define DBGC_CLASS DBGC_PASSDB - -uint32 pdb_get_user_rid (const SAM_ACCOUNT *sampass) -{ - uint32 u_rid; - - if (sampass) - if (sid_peek_check_rid(get_global_sam_sid(), pdb_get_user_sid(sampass),&u_rid)) - return u_rid; - - return (0); -} - -uint32 pdb_get_group_rid (const SAM_ACCOUNT *sampass) -{ - uint32 g_rid; - - if (sampass) - if (sid_peek_check_rid(get_global_sam_sid(), pdb_get_group_sid(sampass),&g_rid)) - return g_rid; - return (0); -} - -BOOL pdb_set_user_sid_from_rid (SAM_ACCOUNT *sampass, uint32 rid, enum pdb_value_state flag) -{ - DOM_SID u_sid; - const DOM_SID *global_sam_sid; - - if (!sampass) - return False; - - if (!(global_sam_sid = get_global_sam_sid())) { - DEBUG(1, ("pdb_set_user_sid_from_rid: Could not read global sam sid!\n")); - return False; - } - - sid_copy(&u_sid, global_sam_sid); - - if (!sid_append_rid(&u_sid, rid)) - return False; - - if (!pdb_set_user_sid(sampass, &u_sid, flag)) - return False; - - DEBUG(10, ("pdb_set_user_sid_from_rid:\n\tsetting user sid %s from rid %d\n", - sid_string_static(&u_sid),rid)); - - return True; -} - -BOOL pdb_set_group_sid_from_rid (SAM_ACCOUNT *sampass, uint32 grid, enum pdb_value_state flag) -{ - DOM_SID g_sid; - const DOM_SID *global_sam_sid; - - if (!sampass) - return False; - - if (!(global_sam_sid = get_global_sam_sid())) { - DEBUG(1, ("pdb_set_user_sid_from_rid: Could not read global sam sid!\n")); - return False; - } - - sid_copy(&g_sid, global_sam_sid); - - if (!sid_append_rid(&g_sid, grid)) - return False; - - if (!pdb_set_group_sid(sampass, &g_sid, flag)) - return False; - - DEBUG(10, ("pdb_set_group_sid_from_rid:\n\tsetting group sid %s from rid %d\n", - sid_string_static(&g_sid), grid)); - - return True; -} - diff --git a/source/python/.cvsignore b/source/python/.cvsignore deleted file mode 100644 index 7e99e367f84..00000000000 --- a/source/python/.cvsignore +++ /dev/null @@ -1 +0,0 @@ -*.pyc \ No newline at end of file diff --git a/source/python/README b/source/python/README deleted file mode 100644 index 04f794215ab..00000000000 --- a/source/python/README +++ /dev/null @@ -1,28 +0,0 @@ -This directory contains Python bindings to allow you to access various -aspects of Samba. At the moment their status is "experimental" and -they are not built by default. - -In order to be able to compile samba-python you need to have python -and the python-dev packages installed. - -Python libraries are always built for a particular version of Python -(2.2, 2.1, etc), and libraries built for one version will not be seen -by another. By default Samba's libraries are built for whatever is -installed as "python" on your $PATH, but you can override this using -the --with-python option. For example - - $ ./configure --with-python=python2.2 - -To build: - -$ autoconf -$ ./configure -$ make python_ext - -Now, you can install the modules: - -$ cp build/lib.*/*.so /usr/lib/python2.1/lib-dynload/ - -(the directory /usr/lib/python2.1 may vary, depending on your installation) - -Samba-python should work now! diff --git a/source/python/gprinterdata b/source/python/gprinterdata deleted file mode 100755 index cd062076c0b..00000000000 --- a/source/python/gprinterdata +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env python - -import sys -from gtkdictbrowser import GtkDictBrowser, hex_string -import gtk -from samba import spoolss -import string -import printerdata - -# Initialise printerdata dictionary - -if len(sys.argv) < 2 or len(sys.argv) > 3: - print "Usage: gprinterdata [--ex] " - print "where is a UNC printer name." - sys.exit(1) - -try: - host = string.replace(sys.argv[len(sys.argv) - 1], "/", "\\") - if sys.argv[1] == "--ex": - t = printerdata.printerdata_ex(host) - else: - t = printerdata.printerdata(host) -except: - print "gprinterdata: error opening %s" % sys.argv[len(sys.argv) - 1] - sys.exit(1) - -# Create interface - -db = GtkDictBrowser(t) -db.register_get_value_text_fn("", hex_string) -db.build_ui('gprinterdata') - -# Override Python's handling of ctrl-c so we can break out of the -# gui from the command line. - -import signal -signal.signal(signal.SIGINT, signal.SIG_DFL) - -gtk.mainloop() diff --git a/source/python/gtdbtool b/source/python/gtdbtool deleted file mode 100755 index 129f4fe0e2e..00000000000 --- a/source/python/gtdbtool +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env python - -import sys -from gtkdictbrowser import GtkDictBrowser -import gtk -from samba import tdb -import string - -# Open handle on tdb - -if len(sys.argv) != 2: - print "Usage: gdbtool " - sys.exit(1) - -try: - t = tdb.open(sys.argv[1]) -except tdb.error, t: - print "gtdbtool: error opening %s: %s" % (sys.argv[1], t) - sys.exit(1) - -# Create interface - -db = GtkDictBrowser(t) - -def display_key_x00(key): - """Remove \x00 from all keys as they mucks up GTK.""" - return string.replace(key, "\x00", "") - -db.register_get_key_text_fn(display_key_x00) - -db.build_ui('gtdbtool') - -# Override Python's handling of ctrl-c so we can break out of the -# gui from the command line. - -import signal -signal.signal(signal.SIGINT, signal.SIG_DFL) - -gtk.mainloop() diff --git a/source/python/gtkdictbrowser.py b/source/python/gtkdictbrowser.py deleted file mode 100755 index dd8bed8f478..00000000000 --- a/source/python/gtkdictbrowser.py +++ /dev/null @@ -1,272 +0,0 @@ -#!/usr/bin/python -# -# Browse a Python dictionary in a two pane graphical interface written -# in GTK. -# -# The GtkDictBrowser class is supposed to be generic enough to allow -# applications to override enough methods and produce a -# domain-specific browser provided the information is presented as a -# Python dictionary. -# -# Possible applications: -# -# - Windows registry browser -# - SPOOLSS printerdata browser -# - tdb file browser -# - -from gtk import * -import string, re - -class GtkDictBrowser: - - def __init__(self, dict): - self.dict = dict - - # This variable stores a list of (regexp, function) used to - # convert the raw value data to a displayable string. - - self.get_value_text_fns = [] - self.get_key_text = lambda x: x - - # We can filter the list of keys displayed using a regex - - self.filter_regex = "" - - # Create and configure user interface widgets. A string argument is - # used to set the window title. - - def build_ui(self, title): - win = GtkWindow() - win.set_title(title) - - win.connect("destroy", mainquit) - - hpaned = GtkHPaned() - win.add(hpaned) - hpaned.set_border_width(5) - hpaned.show() - - vbox = GtkVBox() - hpaned.add1(vbox) - vbox.show() - - scrolled_win = GtkScrolledWindow() - scrolled_win.set_policy(POLICY_AUTOMATIC, POLICY_AUTOMATIC) - vbox.pack_start(scrolled_win) - scrolled_win.show() - - hbox = GtkHBox() - vbox.pack_end(hbox, expand = 0, padding = 5) - hbox.show() - - label = GtkLabel("Filter:") - hbox.pack_start(label, expand = 0, padding = 5) - label.show() - - self.entry = GtkEntry() - hbox.pack_end(self.entry, padding = 5) - self.entry.show() - - self.entry.connect("activate", self.filter_activated) - - self.list = GtkList() - self.list.set_selection_mode(SELECTION_MULTIPLE) - self.list.set_selection_mode(SELECTION_BROWSE) - scrolled_win.add_with_viewport(self.list) - self.list.show() - - self.list.connect("select_child", self.key_selected) - - scrolled_win = GtkScrolledWindow() - scrolled_win.set_policy(POLICY_AUTOMATIC, POLICY_AUTOMATIC) - hpaned.add2(scrolled_win) - scrolled_win.set_usize(500,400) - scrolled_win.show() - - self.text = GtkText() - self.text.set_editable(FALSE) - scrolled_win.add_with_viewport(self.text) - self.text.show() - - self.text.connect("event", self.event_handler) - - self.menu = GtkMenu() - self.menu.show() - - self.font = load_font("fixed") - - self.update_keylist() - - win.show() - - # Add a key to the left hand side of the user interface - - def add_key(self, key): - display_key = self.get_key_text(key) - list_item = GtkListItem(display_key) - list_item.set_data("raw_key", key) # Store raw key in item data - self.list.add(list_item) - list_item.show() - - # Event handler registered by build_ui() - - def event_handler(self, event, menu): - return FALSE - - # Set the text to appear in the right hand side of the user interface - - def set_value_text(self, item): - - # Clear old old value in text window - - self.text.delete_text(0, self.text.get_length()) - - if type(item) == str: - - # The text widget has trouble inserting text containing NULL - # characters. - - item = string.replace(item, "\x00", ".") - - self.text.insert(self.font, None, None, item) - - else: - - # A non-text item - - self.text.insert(self.font, None, None, repr(item)) - - # This function is called when a key is selected in the left hand side - # of the user interface. - - def key_selected(self, list, list_item): - key = list_item.children()[0].get() - - # Look for a match in the value display function list - - text = self.dict[list_item.get_data("raw_key")] - - for entry in self.get_value_text_fns: - if re.match(entry[0], key): - text = entry[1](text) - break - - self.set_value_text(text) - - # Refresh the key list by removing all items and re-inserting them. - # Items are only inserted if they pass through the filter regexp. - - def update_keylist(self): - self.list.remove_items(self.list.children()) - self.set_value_text("") - for k in self.dict.keys(): - if re.match(self.filter_regex, k): - self.add_key(k) - - # Invoked when the user hits return in the filter text entry widget. - - def filter_activated(self, entry): - self.filter_regex = entry.get_text() - self.update_keylist() - - # Register a key display function - - def register_get_key_text_fn(self, fn): - self.get_key_text = fn - - # Register a value display function - - def register_get_value_text_fn(self, regexp, fn): - self.get_value_text_fns.append((regexp, fn)) - -# -# A utility function to convert a string to the standard hex + ascii format. -# To display all values in hex do: -# register_get_value_text_fn("", gtkdictbrowser.hex_string) -# - -def hex_string(data): - """Return a hex dump of a string as a string. - - The output produced is in the standard 16 characters per line hex + - ascii format: - - 00000000: 40 00 00 00 00 00 00 00 40 00 00 00 01 00 04 80 @....... @....... - 00000010: 01 01 00 00 00 00 00 01 00 00 00 00 ........ .... - """ - - pos = 0 # Position in data - line = 0 # Line of data - - hex = "" # Hex display - ascii = "" # ASCII display - - result = "" - - while pos < len(data): - - # Start with header - - if pos % 16 == 0: - hex = "%08x: " % (line * 16) - ascii = "" - - # Add character - - hex = hex + "%02x " % (ord(data[pos])) - - if ord(data[pos]) < 32 or ord(data[pos]) > 176: - ascii = ascii + '.' - else: - ascii = ascii + data[pos] - - pos = pos + 1 - - # Add separator if half way - - if pos % 16 == 8: - hex = hex + " " - ascii = ascii + " " - - # End of line - - if pos % 16 == 0: - result = result + "%s %s\n" % (hex, ascii) - line = line + 1 - - # Leftover bits - - if pos % 16 != 0: - - # Pad hex string - - for i in range(0, (16 - (pos % 16))): - hex = hex + " " - - # Half way separator - - if (pos % 16) < 8: - hex = hex + " " - - result = result + "%s %s\n" % (hex, ascii) - - return result - -# For testing purposes, create a fixed dictionary to browse with - -if __name__ == "__main__": - - dict = {"chicken": "ham", "spam": "fun", "subdict": {"a": "b", "c": "d"}} - - db = GtkDictBrowser(dict) - - db.build_ui("GtkDictBrowser") - - # Override Python's handling of ctrl-c so we can break out of the - # gui from the command line. - - import signal - signal.signal(signal.SIGINT, signal.SIG_DFL) - - mainloop() diff --git a/source/python/py_spoolss_drivers_conv.c b/source/python/py_spoolss_drivers_conv.c deleted file mode 100644 index 9bc84080529..00000000000 --- a/source/python/py_spoolss_drivers_conv.c +++ /dev/null @@ -1,179 +0,0 @@ -/* - Python wrappers for DCERPC/SMB client routines. - - Copyright (C) Tim Potter, 2002 - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "python/py_spoolss.h" -#include "python/py_conv.h" - -/* Structure/hash conversions */ - -struct pyconv py_DRIVER_INFO_1[] = { - { "name", PY_UNISTR, offsetof(DRIVER_INFO_1, name) }, - { NULL } -}; - -struct pyconv py_DRIVER_INFO_2[] = { - { "version", PY_UINT32, offsetof(DRIVER_INFO_2, version) }, - { "name", PY_UNISTR, offsetof(DRIVER_INFO_2, name) }, - { "architecture", PY_UNISTR, offsetof(DRIVER_INFO_2, architecture) }, - { "driver_path", PY_UNISTR, offsetof(DRIVER_INFO_2, driverpath) }, - { "data_file", PY_UNISTR, offsetof(DRIVER_INFO_2, datafile) }, - { "config_file", PY_UNISTR, offsetof(DRIVER_INFO_2, configfile) }, - { NULL } -}; - -struct pyconv py_DRIVER_INFO_3[] = { - { "version", PY_UINT32, offsetof(DRIVER_INFO_3, version) }, - { "name", PY_UNISTR, offsetof(DRIVER_INFO_3, name) }, - { "architecture", PY_UNISTR, offsetof(DRIVER_INFO_3, architecture) }, - { "driver_path", PY_UNISTR, offsetof(DRIVER_INFO_3, driverpath) }, - { "data_file", PY_UNISTR, offsetof(DRIVER_INFO_3, datafile) }, - { "config_file", PY_UNISTR, offsetof(DRIVER_INFO_3, configfile) }, - { "help_file", PY_UNISTR, offsetof(DRIVER_INFO_3, helpfile) }, - { "monitor_name", PY_UNISTR, offsetof(DRIVER_INFO_3, monitorname) }, - { "default_datatype", PY_UNISTR, offsetof(DRIVER_INFO_3, defaultdatatype) }, - { NULL } -}; - -struct pyconv py_DRIVER_INFO_6[] = { - { "version", PY_UINT32, offsetof(DRIVER_INFO_6, version) }, - { "name", PY_UNISTR, offsetof(DRIVER_INFO_6, name) }, - { "architecture", PY_UNISTR, offsetof(DRIVER_INFO_6, architecture) }, - { "driver_path", PY_UNISTR, offsetof(DRIVER_INFO_6, driverpath) }, - { "data_file", PY_UNISTR, offsetof(DRIVER_INFO_6, datafile) }, - { "config_file", PY_UNISTR, offsetof(DRIVER_INFO_6, configfile) }, - { "help_file", PY_UNISTR, offsetof(DRIVER_INFO_6, helpfile) }, - { "monitor_name", PY_UNISTR, offsetof(DRIVER_INFO_6, monitorname) }, - { "default_datatype", PY_UNISTR, offsetof(DRIVER_INFO_6, defaultdatatype) }, - /* driver_date */ - { "padding", PY_UINT32, offsetof(DRIVER_INFO_6, padding) }, - { "driver_version_low", PY_UINT32, offsetof(DRIVER_INFO_6, driver_version_low) }, - { "driver_version_high", PY_UINT32, offsetof(DRIVER_INFO_6, driver_version_high) }, - { "mfg_name", PY_UNISTR, offsetof(DRIVER_INFO_6, mfgname) }, - { "oem_url", PY_UNISTR, offsetof(DRIVER_INFO_6, oem_url) }, - { "hardware_id", PY_UNISTR, offsetof(DRIVER_INFO_6, hardware_id) }, - { "provider", PY_UNISTR, offsetof(DRIVER_INFO_6, provider) }, - - { NULL } -}; - -struct pyconv py_DRIVER_DIRECTORY_1[] = { - { "name", PY_UNISTR, offsetof(DRIVER_DIRECTORY_1, name) }, - { NULL } -}; - -static uint16 *to_dependentfiles(PyObject *dict) -{ - return (uint16 *)"abcd\0"; -} - -BOOL py_from_DRIVER_INFO_1(PyObject **dict, DRIVER_INFO_1 *info) -{ - *dict = from_struct(info, py_DRIVER_INFO_1); - PyDict_SetItemString(*dict, "level", PyInt_FromLong(1)); - - return True; -} - -BOOL py_to_DRIVER_INFO_1(DRIVER_INFO_1 *info, PyObject *dict) -{ - return False; -} - -BOOL py_from_DRIVER_INFO_2(PyObject **dict, DRIVER_INFO_2 *info) -{ - *dict = from_struct(info, py_DRIVER_INFO_2); - PyDict_SetItemString(*dict, "level", PyInt_FromLong(2)); - - return True; -} - -BOOL py_to_DRIVER_INFO_2(DRIVER_INFO_2 *info, PyObject *dict) -{ - return False; -} - -BOOL py_from_DRIVER_INFO_3(PyObject **dict, DRIVER_INFO_3 *info) -{ - *dict = from_struct(info, py_DRIVER_INFO_3); - - PyDict_SetItemString(*dict, "level", PyInt_FromLong(3)); - - PyDict_SetItemString( - *dict, "dependent_files", - from_unistr_list(info->dependentfiles)); - - return True; -} - -BOOL py_to_DRIVER_INFO_3(DRIVER_INFO_3 *info, PyObject *dict) -{ - PyObject *obj, *dict_copy = PyDict_Copy(dict); - BOOL result = False; - - if (!(obj = PyDict_GetItemString(dict_copy, "dependent_files")) || - !PyList_Check(obj)) - goto done; - - info->dependentfiles = to_dependentfiles(obj); - - PyDict_DelItemString(dict_copy, "dependent_files"); - - if (!(obj = PyDict_GetItemString(dict_copy, "level")) || - !PyInt_Check(obj)) - goto done; - - PyDict_DelItemString(dict_copy, "level"); - - if (!to_struct(info, dict_copy, py_DRIVER_INFO_3)) - goto done; - - result = True; - -done: - Py_DECREF(dict_copy); - return result; -} - -BOOL py_from_DRIVER_INFO_6(PyObject **dict, DRIVER_INFO_6 *info) -{ - *dict = from_struct(info, py_DRIVER_INFO_6); - PyDict_SetItemString(*dict, "level", PyInt_FromLong(6)); - PyDict_SetItemString( - *dict, "dependent_files", - from_unistr_list(info->dependentfiles)); - return True; -} - -BOOL py_to_DRIVER_INFO_6(DRIVER_INFO_6 *info, PyObject *dict) -{ - return False; -} - -BOOL py_from_DRIVER_DIRECTORY_1(PyObject **dict, DRIVER_DIRECTORY_1 *info) -{ - *dict = from_struct(info, py_DRIVER_DIRECTORY_1); - PyDict_SetItemString(*dict, "level", PyInt_FromLong(1)); - return True; -} - -BOOL py_to_DRIVER_DIRECTORY_1(DRIVER_DIRECTORY_1 *info, PyObject *dict) -{ - return False; -} diff --git a/source/python/py_spoolss_jobs.c b/source/python/py_spoolss_jobs.c deleted file mode 100644 index 59754bd36dd..00000000000 --- a/source/python/py_spoolss_jobs.c +++ /dev/null @@ -1,377 +0,0 @@ -/* - Python wrappers for DCERPC/SMB client routines. - - Copyright (C) Tim Potter, 2002 - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "python/py_spoolss.h" - -/* Enumerate jobs */ - -PyObject *spoolss_hnd_enumjobs(PyObject *self, PyObject *args, PyObject *kw) -{ - spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self; - WERROR werror; - PyObject *result; - int level = 1; - uint32 i, needed, num_jobs; - static char *kwlist[] = {"level", NULL}; - JOB_INFO_CTR ctr; - - /* Parse parameters */ - - if (!PyArg_ParseTupleAndKeywords(args, kw, "|i", kwlist, &level)) - return NULL; - - /* Call rpc function */ - - werror = cli_spoolss_enumjobs( - hnd->cli, hnd->mem_ctx, 0, &needed, &hnd->pol, level, 0, - 1000, &num_jobs, &ctr); - - if (W_ERROR_V(werror) == ERRinsufficientbuffer) - werror = cli_spoolss_enumjobs( - hnd->cli, hnd->mem_ctx, needed, NULL, &hnd->pol, - level, 0, 1000, &num_jobs, &ctr); - - /* Return value */ - - result = Py_None; - - if (!W_ERROR_IS_OK(werror)) { - PyErr_SetObject(spoolss_werror, py_werror_tuple(werror)); - goto done; - } - - result = PyList_New(num_jobs); - - switch (level) { - case 1: - for (i = 0; i < num_jobs; i++) { - PyObject *value; - - py_from_JOB_INFO_1(&value, &ctr.job.job_info_1[i]); - - PyList_SetItem(result, i, value); - } - - break; - case 2: - for(i = 0; i < num_jobs; i++) { - PyObject *value; - - py_from_JOB_INFO_2(&value, &ctr.job.job_info_2[i]); - - PyList_SetItem(result, i, value); - } - - break; - } - - done: - Py_INCREF(result); - return result; -} - -/* Set job command */ - -PyObject *spoolss_hnd_setjob(PyObject *self, PyObject *args, PyObject *kw) -{ - spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self; - WERROR werror; - uint32 level = 0, command, jobid; - static char *kwlist[] = {"jobid", "command", "level", NULL}; - - /* Parse parameters */ - - if (!PyArg_ParseTupleAndKeywords( - args, kw, "ii|i", kwlist, &jobid, &command, &level)) - return NULL; - - /* Call rpc function */ - - werror = cli_spoolss_setjob(hnd->cli, hnd->mem_ctx, &hnd->pol, - jobid, level, command); - - if (!W_ERROR_IS_OK(werror)) { - PyErr_SetObject(spoolss_werror, py_werror_tuple(werror)); - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -/* Get job */ - -PyObject *spoolss_hnd_getjob(PyObject *self, PyObject *args, PyObject *kw) -{ - spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self; - WERROR werror; - PyObject *result; - uint32 level = 1, jobid, needed; - static char *kwlist[] = {"jobid", "level", NULL}; - JOB_INFO_CTR ctr; - - /* Parse parameters */ - - if (!PyArg_ParseTupleAndKeywords( - args, kw, "i|i", kwlist, &jobid, &level)) - return NULL; - - /* Call rpc function */ - - werror = cli_spoolss_getjob(hnd->cli, hnd->mem_ctx, 0, &needed, - &hnd->pol, jobid, level, &ctr); - - if (W_ERROR_V(werror) == ERRinsufficientbuffer) - werror = cli_spoolss_getjob( - hnd->cli, hnd->mem_ctx, needed, NULL, &hnd->pol, - jobid, level, &ctr); - - if (!W_ERROR_IS_OK(werror)) { - PyErr_SetObject(spoolss_werror, py_werror_tuple(werror)); - return NULL; - } - - switch(level) { - case 1: - py_from_JOB_INFO_1(&result, &ctr.job.job_info_1[0]); - break; - case 2: - py_from_JOB_INFO_2(&result, &ctr.job.job_info_2[0]); - break; - } - - return result; -} - -/* Start page printer. This notifies the spooler that a page is about to be - printed on the specified printer. */ - -PyObject *spoolss_hnd_startpageprinter(PyObject *self, PyObject *args, PyObject *kw) -{ - spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self; - WERROR werror; - static char *kwlist[] = { NULL }; - - /* Parse parameters */ - - if (!PyArg_ParseTupleAndKeywords(args, kw, "", kwlist)) - return NULL; - - /* Call rpc function */ - - werror = cli_spoolss_startpageprinter( - hnd->cli, hnd->mem_ctx, &hnd->pol); - - if (!W_ERROR_IS_OK(werror)) { - PyErr_SetObject(spoolss_werror, py_werror_tuple(werror)); - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -/* End page printer. This notifies the spooler that a page has finished - being printed on the specified printer. */ - -PyObject *spoolss_hnd_endpageprinter(PyObject *self, PyObject *args, PyObject *kw) -{ - spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self; - WERROR werror; - static char *kwlist[] = { NULL }; - - /* Parse parameters */ - - if (!PyArg_ParseTupleAndKeywords(args, kw, "", kwlist)) - return NULL; - - /* Call rpc function */ - - werror = cli_spoolss_endpageprinter( - hnd->cli, hnd->mem_ctx, &hnd->pol); - - if (!W_ERROR_IS_OK(werror)) { - PyErr_SetObject(spoolss_werror, py_werror_tuple(werror)); - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -/* Start doc printer. This notifies the spooler that a document is about to be - printed on the specified printer. */ - -PyObject *spoolss_hnd_startdocprinter(PyObject *self, PyObject *args, PyObject *kw) -{ - spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self; - WERROR werror; - static char *kwlist[] = { "document_info", NULL }; - PyObject *info, *obj; - uint32 level, jobid; - char *document_name = NULL, *output_file = NULL, *data_type = NULL; - - /* Parse parameters */ - - if (!PyArg_ParseTupleAndKeywords( - args, kw, "O!", kwlist, &PyDict_Type, &info)) - return NULL; - - /* Check document_info parameter */ - - if (!get_level_value(info, &level)) { - PyErr_SetString(spoolss_error, "invalid info level"); - return NULL; - } - - if (level != 1) { - PyErr_SetString(spoolss_error, "unsupported info level"); - return NULL; - } - - if ((obj = PyDict_GetItemString(info, "document_name"))) { - - if (!PyString_Check(obj) && obj != Py_None) { - PyErr_SetString(spoolss_error, - "document_name not a string"); - return NULL; - } - - if (PyString_Check(obj)) - document_name = PyString_AsString(obj); - - } else { - PyErr_SetString(spoolss_error, "no document_name present"); - return NULL; - } - - if ((obj = PyDict_GetItemString(info, "output_file"))) { - - if (!PyString_Check(obj) && obj != Py_None) { - PyErr_SetString(spoolss_error, - "output_file not a string"); - return NULL; - } - - if (PyString_Check(obj)) - output_file = PyString_AsString(obj); - - } else { - PyErr_SetString(spoolss_error, "no output_file present"); - return NULL; - } - - if ((obj = PyDict_GetItemString(info, "data_type"))) { - - if (!PyString_Check(obj) && obj != Py_None) { - PyErr_SetString(spoolss_error, - "data_type not a string"); - return NULL; - } - - if (PyString_Check(obj)) - data_type = PyString_AsString(obj); - - } else { - PyErr_SetString(spoolss_error, "no data_type present"); - return NULL; - } - - /* Call rpc function */ - - werror = cli_spoolss_startdocprinter( - hnd->cli, hnd->mem_ctx, &hnd->pol, document_name, - output_file, data_type, &jobid); - - if (!W_ERROR_IS_OK(werror)) { - PyErr_SetObject(spoolss_werror, py_werror_tuple(werror)); - return NULL; - } - - /* The return value is zero for an error (where does the status - code come from now??) and the return value is the jobid - allocated for the new job. */ - - return Py_BuildValue("i", jobid); -} - -/* End doc printer. This notifies the spooler that a document has finished - being printed on the specified printer. */ - -PyObject *spoolss_hnd_enddocprinter(PyObject *self, PyObject *args, PyObject *kw) -{ - spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self; - WERROR werror; - static char *kwlist[] = { NULL }; - - /* Parse parameters */ - - if (!PyArg_ParseTupleAndKeywords(args, kw, "", kwlist)) - return NULL; - - /* Call rpc function */ - - werror = cli_spoolss_enddocprinter(hnd->cli, hnd->mem_ctx, &hnd->pol); - - if (!W_ERROR_IS_OK(werror)) { - PyErr_SetObject(spoolss_werror, py_werror_tuple(werror)); - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -/* Write data to a printer */ - -PyObject *spoolss_hnd_writeprinter(PyObject *self, PyObject *args, PyObject *kw) -{ - spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self; - WERROR werror; - static char *kwlist[] = { "data", NULL }; - PyObject *data; - uint32 num_written; - - /* Parse parameters */ - - if (!PyArg_ParseTupleAndKeywords( - args, kw, "O!", kwlist, &PyString_Type, &data)) - return NULL; - - /* Call rpc function */ - - werror = cli_spoolss_writeprinter( - hnd->cli, hnd->mem_ctx, &hnd->pol, PyString_Size(data), - PyString_AsString(data), &num_written); - - if (!W_ERROR_IS_OK(werror)) { - PyErr_SetObject(spoolss_werror, py_werror_tuple(werror)); - return NULL; - } - - Py_INCREF(Py_None); - return Py_None; -} - -PyObject *spoolss_hnd_addjob(PyObject *self, PyObject *args, PyObject *kw) -{ - PyErr_SetString(spoolss_error, "Not implemented"); - return NULL; -} diff --git a/source/python/py_spoolss_jobs_conv.c b/source/python/py_spoolss_jobs_conv.c deleted file mode 100644 index cb04ec6713c..00000000000 --- a/source/python/py_spoolss_jobs_conv.c +++ /dev/null @@ -1,102 +0,0 @@ -/* - Python wrappers for DCERPC/SMB client routines. - - Copyright (C) Tim Potter, 2002 - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "python/py_spoolss.h" -#include "python/py_conv.h" - -struct pyconv py_JOB_INFO_1[] = { - { "jobid", PY_UINT32, offsetof(JOB_INFO_1, jobid) }, - { "printer_name", PY_UNISTR, offsetof(JOB_INFO_1, printername) }, - { "server_name", PY_UNISTR, offsetof(JOB_INFO_1, machinename) }, - { "user_name", PY_UNISTR, offsetof(JOB_INFO_1, username) }, - { "document_name", PY_UNISTR, offsetof(JOB_INFO_1, document) }, - { "data_type", PY_UNISTR, offsetof(JOB_INFO_1, datatype) }, - { "text_status", PY_UNISTR, offsetof(JOB_INFO_1, text_status) }, - { "status", PY_UINT32, offsetof(JOB_INFO_1, status) }, - { "priority", PY_UINT32, offsetof(JOB_INFO_1, priority) }, - { "position", PY_UINT32, offsetof(JOB_INFO_1, position) }, - { "total_pages", PY_UINT32, offsetof(JOB_INFO_1, totalpages) }, - { "pages_printed", PY_UINT32, offsetof(JOB_INFO_1, pagesprinted) }, - { NULL } -}; - -struct pyconv py_JOB_INFO_2[] = { - { "jobid", PY_UINT32, offsetof(JOB_INFO_2, jobid) }, - { "printer_name", PY_UNISTR, offsetof(JOB_INFO_2, printername) }, - { "server_name", PY_UNISTR, offsetof(JOB_INFO_2, machinename) }, - { "user_name", PY_UNISTR, offsetof(JOB_INFO_2, username) }, - { "document_name", PY_UNISTR, offsetof(JOB_INFO_2, document) }, - { "notify_name", PY_UNISTR, offsetof(JOB_INFO_2, notifyname) }, - { "data_type", PY_UNISTR, offsetof(JOB_INFO_2, datatype) }, - { "print_processor", PY_UNISTR, offsetof(JOB_INFO_2, printprocessor) }, - { "parameters", PY_UNISTR, offsetof(JOB_INFO_2, parameters) }, - { "driver_name", PY_UNISTR, offsetof(JOB_INFO_2, drivername) }, - { "text_status", PY_UNISTR, offsetof(JOB_INFO_2, text_status) }, - { "status", PY_UINT32, offsetof(JOB_INFO_2, status) }, - { "priority", PY_UINT32, offsetof(JOB_INFO_2, priority) }, - { "position", PY_UINT32, offsetof(JOB_INFO_2, position) }, - { "start_time", PY_UINT32, offsetof(JOB_INFO_2, starttime) }, - { "until_time", PY_UINT32, offsetof(JOB_INFO_2, untiltime) }, - { "total_pages", PY_UINT32, offsetof(JOB_INFO_2, totalpages) }, - { "size", PY_UINT32, offsetof(JOB_INFO_2, size) }, - { "time_elapsed", PY_UINT32, offsetof(JOB_INFO_2, timeelapsed) }, - { "pages_printed", PY_UINT32, offsetof(JOB_INFO_2, pagesprinted) }, - { NULL } -}; - -struct pyconv py_DOC_INFO_1[] = { - { "document_name", PY_UNISTR, offsetof(DOC_INFO_1, docname) }, - { "output_file", PY_UNISTR, offsetof(DOC_INFO_1, outputfile) }, - { "data_type", PY_UNISTR, offsetof(DOC_INFO_1, datatype) }, - { NULL } -}; - -BOOL py_from_JOB_INFO_1(PyObject **dict, JOB_INFO_1 *info) -{ - *dict = from_struct(info, py_JOB_INFO_1); - return True; -} - -BOOL py_to_JOB_INFO_1(JOB_INFO_1 *info, PyObject *dict) -{ - return False; -} - -BOOL py_from_JOB_INFO_2(PyObject **dict, JOB_INFO_2 *info) -{ - *dict = from_struct(info, py_JOB_INFO_2); - return True; -} - -BOOL py_to_JOB_INFO_2(JOB_INFO_2 *info, PyObject *dict) -{ - return False; -} - -BOOL py_from_DOC_INFO_1(PyObject **dict, DOC_INFO_1 *info) -{ - *dict = from_struct(info, py_DOC_INFO_1); - return True; -} - -BOOL py_to_DOC_INFO_1(DOC_INFO_1 *info, PyObject *dict) -{ - return to_struct(info, dict, py_DOC_INFO_1); -} diff --git a/source/python/py_spoolss_ports_conv.c b/source/python/py_spoolss_ports_conv.c deleted file mode 100644 index 3f6d94bf7e7..00000000000 --- a/source/python/py_spoolss_ports_conv.c +++ /dev/null @@ -1,58 +0,0 @@ -/* - Python wrappers for DCERPC/SMB client routines. - - Copyright (C) Tim Potter, 2002 - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "python/py_spoolss.h" -#include "python/py_conv.h" - -struct pyconv py_PORT_INFO_1[] = { - { "name", PY_UNISTR, offsetof(PORT_INFO_1, port_name) }, - { NULL } -}; - -struct pyconv py_PORT_INFO_2[] = { - { "name", PY_UNISTR, offsetof(PORT_INFO_2, port_name) }, - { "monitor_name", PY_UNISTR, offsetof(PORT_INFO_2, monitor_name) }, - { "description", PY_UNISTR, offsetof(PORT_INFO_2, description) }, - { "reserved", PY_UINT32, offsetof(PORT_INFO_2, reserved) }, - { "type", PY_UINT32, offsetof(PORT_INFO_2, port_type) }, - { NULL } -}; - -BOOL py_from_PORT_INFO_1(PyObject **dict, PORT_INFO_1 *info) -{ - *dict = from_struct(info, py_PORT_INFO_1); - return True; -} - -BOOL py_to_PORT_INFO_1(PORT_INFO_1 *info, PyObject *dict) -{ - return False; -} - -BOOL py_from_PORT_INFO_2(PyObject **dict, PORT_INFO_2 *info) -{ - *dict = from_struct(info, py_PORT_INFO_2); - return True; -} - -BOOL py_to_PORT_INFO_2(PORT_INFO_2 *info, PyObject *dict) -{ - return False; -} diff --git a/source/python/py_spoolss_printers_conv.c b/source/python/py_spoolss_printers_conv.c deleted file mode 100644 index f7b2f516df5..00000000000 --- a/source/python/py_spoolss_printers_conv.c +++ /dev/null @@ -1,354 +0,0 @@ -/* - Python wrappers for DCERPC/SMB client routines. - - Copyright (C) Tim Potter, 2002 - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "python/py_spoolss.h" -#include "python/py_conv.h" - -struct pyconv py_PRINTER_INFO_0[] = { - { "name", PY_UNISTR, offsetof(PRINTER_INFO_0, printername) }, - { "server_name", PY_UNISTR, offsetof(PRINTER_INFO_0, servername) }, - - { "cjobs", PY_UINT32, offsetof(PRINTER_INFO_0, cjobs) }, - { "total_jobs", PY_UINT32, offsetof(PRINTER_INFO_0, total_jobs) }, - { "total_bytes", PY_UINT32, offsetof(PRINTER_INFO_0, total_bytes) }, - - { "year", PY_UINT16, offsetof(PRINTER_INFO_0, year) }, - { "month", PY_UINT16, offsetof(PRINTER_INFO_0, month) }, - { "day_of_week", PY_UINT16, offsetof(PRINTER_INFO_0, dayofweek) }, - { "day", PY_UINT16, offsetof(PRINTER_INFO_0, day) }, - { "hour", PY_UINT16, offsetof(PRINTER_INFO_0, hour) }, - { "minute", PY_UINT16, offsetof(PRINTER_INFO_0, minute) }, - { "second", PY_UINT16, offsetof(PRINTER_INFO_0, second) }, - { "milliseconds", PY_UINT16, offsetof(PRINTER_INFO_0, milliseconds) }, - - { "global_counter", PY_UINT32, offsetof(PRINTER_INFO_0, global_counter) }, - { "total_pages", PY_UINT32, offsetof(PRINTER_INFO_0, total_pages) }, - - { "major_version", PY_UINT16, offsetof(PRINTER_INFO_0, major_version) }, - { "build_version", PY_UINT16, offsetof(PRINTER_INFO_0, build_version) }, - - { "unknown7", PY_UINT32, offsetof(PRINTER_INFO_0, unknown7) }, - { "unknown8", PY_UINT32, offsetof(PRINTER_INFO_0, unknown8) }, - { "unknown9", PY_UINT32, offsetof(PRINTER_INFO_0, unknown9) }, - { "session_counter", PY_UINT32, offsetof(PRINTER_INFO_0, session_counter)}, - { "unknown11", PY_UINT32, offsetof(PRINTER_INFO_0, unknown11) }, - { "printer_errors", PY_UINT32, offsetof(PRINTER_INFO_0, printer_errors) }, - { "unknown13", PY_UINT32, offsetof(PRINTER_INFO_0, unknown13) }, - { "unknown14", PY_UINT32, offsetof(PRINTER_INFO_0, unknown14) }, - { "unknown15", PY_UINT32, offsetof(PRINTER_INFO_0, unknown15) }, - { "unknown16", PY_UINT32, offsetof(PRINTER_INFO_0, unknown16) }, - { "change_id", PY_UINT32, offsetof(PRINTER_INFO_0, change_id) }, - { "unknown18", PY_UINT32, offsetof(PRINTER_INFO_0, unknown18) }, - { "status", PY_UINT32, offsetof(PRINTER_INFO_0, status) }, - { "unknown20", PY_UINT32, offsetof(PRINTER_INFO_0, unknown20) }, - { "c_setprinter", PY_UINT32, offsetof(PRINTER_INFO_0, c_setprinter) }, - { "unknown22", PY_UINT32, offsetof(PRINTER_INFO_0, unknown22) }, - { "unknown23", PY_UINT32, offsetof(PRINTER_INFO_0, unknown23) }, - { "unknown24", PY_UINT32, offsetof(PRINTER_INFO_0, unknown24) }, - { "unknown25", PY_UINT32, offsetof(PRINTER_INFO_0, unknown25) }, - { "unknown26", PY_UINT32, offsetof(PRINTER_INFO_0, unknown26) }, - { "unknown27", PY_UINT32, offsetof(PRINTER_INFO_0, unknown27) }, - { "unknown28", PY_UINT32, offsetof(PRINTER_INFO_0, unknown28) }, - { "unknown29", PY_UINT32, offsetof(PRINTER_INFO_0, unknown29) }, - - { NULL } -}; - -struct pyconv py_PRINTER_INFO_1[] = { - { "name", PY_UNISTR, offsetof(PRINTER_INFO_1, name) }, - { "description", PY_UNISTR, offsetof(PRINTER_INFO_1, description) }, - { "comment", PY_UNISTR, offsetof(PRINTER_INFO_1, comment) }, - { "flags", PY_UINT32, offsetof(PRINTER_INFO_1, flags) }, - { NULL } -}; - -struct pyconv py_PRINTER_INFO_2[] = { - { "server_name", PY_UNISTR, offsetof(PRINTER_INFO_2, servername) }, - { "name", PY_UNISTR, offsetof(PRINTER_INFO_2, printername) }, - { "share_name", PY_UNISTR, offsetof(PRINTER_INFO_2, sharename) }, - { "port_name", PY_UNISTR, offsetof(PRINTER_INFO_2, portname) }, - { "driver_name", PY_UNISTR, offsetof(PRINTER_INFO_2, drivername) }, - { "comment", PY_UNISTR, offsetof(PRINTER_INFO_2, comment) }, - { "location", PY_UNISTR, offsetof(PRINTER_INFO_2, location) }, - { "datatype", PY_UNISTR, offsetof(PRINTER_INFO_2, datatype) }, - { "sepfile", PY_UNISTR, offsetof(PRINTER_INFO_2, sepfile) }, - { "print_processor", PY_UNISTR, offsetof(PRINTER_INFO_2, printprocessor) }, - { "parameters", PY_UNISTR, offsetof(PRINTER_INFO_2, parameters) }, - { "attributes", PY_UINT32, offsetof(PRINTER_INFO_2, attributes) }, - { "default_priority", PY_UINT32, offsetof(PRINTER_INFO_2, defaultpriority) }, - { "priority", PY_UINT32, offsetof(PRINTER_INFO_2, priority) }, - { "start_time", PY_UINT32, offsetof(PRINTER_INFO_2, starttime) }, - { "until_time", PY_UINT32, offsetof(PRINTER_INFO_2, untiltime) }, - { "status", PY_UINT32, offsetof(PRINTER_INFO_2, status) }, - { "cjobs", PY_UINT32, offsetof(PRINTER_INFO_2, cjobs) }, - { "average_ppm", PY_UINT32, offsetof(PRINTER_INFO_2, averageppm) }, - { NULL } -}; - -struct pyconv py_PRINTER_INFO_3[] = { - { "flags", PY_UINT32, offsetof(PRINTER_INFO_3, flags) }, - { NULL } -}; - -struct pyconv py_DEVICEMODE[] = { - { "device_name", PY_UNISTR, offsetof(DEVICEMODE, devicename) }, - { "spec_version", PY_UINT16, offsetof(DEVICEMODE, specversion) }, - { "driver_version", PY_UINT16, offsetof(DEVICEMODE, driverversion) }, - { "size", PY_UINT16, offsetof(DEVICEMODE, size) }, - { "fields", PY_UINT16, offsetof(DEVICEMODE, fields) }, - { "orientation", PY_UINT16, offsetof(DEVICEMODE, orientation) }, - { "paper_size", PY_UINT16, offsetof(DEVICEMODE, papersize) }, - { "paper_width", PY_UINT16, offsetof(DEVICEMODE, paperwidth) }, - { "paper_length", PY_UINT16, offsetof(DEVICEMODE, paperlength) }, - { "scale", PY_UINT16, offsetof(DEVICEMODE, scale) }, - { "copies", PY_UINT16, offsetof(DEVICEMODE, copies) }, - { "default_source", PY_UINT16, offsetof(DEVICEMODE, defaultsource) }, - { "print_quality", PY_UINT16, offsetof(DEVICEMODE, printquality) }, - { "color", PY_UINT16, offsetof(DEVICEMODE, color) }, - { "duplex", PY_UINT16, offsetof(DEVICEMODE, duplex) }, - { "y_resolution", PY_UINT16, offsetof(DEVICEMODE, yresolution) }, - { "tt_option", PY_UINT16, offsetof(DEVICEMODE, ttoption) }, - { "collate", PY_UINT16, offsetof(DEVICEMODE, collate) }, - { "form_name", PY_UNISTR, offsetof(DEVICEMODE, formname) }, - { "log_pixels", PY_UINT16, offsetof(DEVICEMODE, logpixels) }, - { "bits_per_pel", PY_UINT32, offsetof(DEVICEMODE, bitsperpel) }, - { "pels_width", PY_UINT32, offsetof(DEVICEMODE, pelswidth) }, - { "pels_height", PY_UINT32, offsetof(DEVICEMODE, pelsheight) }, - { "display_flags", PY_UINT32, offsetof(DEVICEMODE, displayflags) }, - { "display_frequency", PY_UINT32, offsetof(DEVICEMODE, displayfrequency) }, - { "icm_method", PY_UINT32, offsetof(DEVICEMODE, icmmethod) }, - { "icm_intent", PY_UINT32, offsetof(DEVICEMODE, icmintent) }, - { "media_type", PY_UINT32, offsetof(DEVICEMODE, mediatype) }, - { "dither_type", PY_UINT32, offsetof(DEVICEMODE, dithertype) }, - { "reserved1", PY_UINT32, offsetof(DEVICEMODE, reserved1) }, - { "reserved2", PY_UINT32, offsetof(DEVICEMODE, reserved2) }, - { "panning_width", PY_UINT32, offsetof(DEVICEMODE, panningwidth) }, - { "panning_height", PY_UINT32, offsetof(DEVICEMODE, panningheight) }, - { NULL } -}; - -/* - * Convert between DEVICEMODE and Python - */ - -BOOL py_from_DEVICEMODE(PyObject **dict, DEVICEMODE *devmode) -{ - *dict = from_struct(devmode, py_DEVICEMODE); - - PyDict_SetItemString(*dict, "private", - PyString_FromStringAndSize( - devmode->private, devmode->driverextra)); - - return True; -} - -BOOL py_to_DEVICEMODE(DEVICEMODE *devmode, PyObject *dict) -{ - PyObject *obj, *dict_copy = PyDict_Copy(dict); - BOOL result = False; - - if (!(obj = PyDict_GetItemString(dict_copy, "private"))) - goto done; - - if (!PyString_Check(obj)) - goto done; - - devmode->private = PyString_AsString(obj); - devmode->driverextra = PyString_Size(obj); - - PyDict_DelItemString(dict_copy, "private"); - - if (!to_struct(devmode, dict_copy, py_DEVICEMODE)) - goto done; - - result = True; - -done: - Py_DECREF(dict_copy); - return result; -} - -/* - * Convert between PRINTER_INFO_0 and Python - */ - -BOOL py_from_PRINTER_INFO_0(PyObject **dict, PRINTER_INFO_0 *info) -{ - *dict = from_struct(info, py_PRINTER_INFO_0); - PyDict_SetItemString(*dict, "level", PyInt_FromLong(0)); - return True; -} - -BOOL py_to_PRINTER_INFO_0(PRINTER_INFO_0 *info, PyObject *dict) -{ - return False; -} - -/* - * Convert between PRINTER_INFO_1 and Python - */ - -BOOL py_from_PRINTER_INFO_1(PyObject **dict, PRINTER_INFO_1 *info) -{ - *dict = from_struct(info, py_PRINTER_INFO_1); - PyDict_SetItemString(*dict, "level", PyInt_FromLong(1)); - return True; -} - -BOOL py_to_PRINTER_INFO_1(PRINTER_INFO_1 *info, PyObject *dict) -{ - PyObject *obj, *dict_copy = PyDict_Copy(dict); - BOOL result = False; - - if (!(obj = PyDict_GetItemString(dict_copy, "level")) || - !PyInt_Check(obj)) - goto done; - - PyDict_DelItemString(dict_copy, "level"); - - if (!to_struct(info, dict_copy, py_PRINTER_INFO_1)) - goto done; - - result = True; - -done: - Py_DECREF(dict_copy); - return result; -} - -/* - * Convert between PRINTER_INFO_2 and Python - */ - -BOOL py_from_PRINTER_INFO_2(PyObject **dict, PRINTER_INFO_2 *info) -{ - PyObject *obj; - - *dict = from_struct(info, py_PRINTER_INFO_2); - - /* The security descriptor could be NULL */ - - if (info->secdesc) { - if (py_from_SECDESC(&obj, info->secdesc)) - PyDict_SetItemString(*dict, "security_descriptor", obj); - } - - /* Bong! The devmode could be NULL */ - - if (info->devmode) - py_from_DEVICEMODE(&obj, info->devmode); - else - obj = PyDict_New(); - - PyDict_SetItemString(*dict, "device_mode", obj); - - PyDict_SetItemString(*dict, "level", PyInt_FromLong(2)); - - return True; -} - -BOOL py_to_PRINTER_INFO_2(PRINTER_INFO_2 *info, PyObject *dict, - TALLOC_CTX *mem_ctx) -{ - PyObject *obj, *dict_copy = PyDict_Copy(dict); - BOOL result = False; - - /* Convert security descriptor - may be NULL */ - - info->secdesc = NULL; - - if ((obj = PyDict_GetItemString(dict_copy, "security_descriptor"))) { - - if (!PyDict_Check(obj)) - goto done; - - if (!py_to_SECDESC(&info->secdesc, obj, mem_ctx)) - goto done; - - PyDict_DelItemString(dict_copy, "security_descriptor"); - } - - /* Convert device mode */ - - if (!(obj = PyDict_GetItemString(dict_copy, "device_mode")) - || !PyDict_Check(obj)) - goto done; - - info->devmode = talloc(mem_ctx, sizeof(DEVICEMODE)); - - if (!py_to_DEVICEMODE(info->devmode, obj)) - goto done; - - PyDict_DelItemString(dict_copy, "device_mode"); - - /* Check info level */ - - if (!(obj = PyDict_GetItemString(dict_copy, "level")) || - !PyInt_Check(obj)) - goto done; - - PyDict_DelItemString(dict_copy, "level"); - - /* Convert remaining elements of dictionary */ - - if (!to_struct(info, dict_copy, py_PRINTER_INFO_2)) - goto done; - - result = True; - -done: - Py_DECREF(dict_copy); - return result; -} - -/* - * Convert between PRINTER_INFO_1 and Python - */ - -BOOL py_from_PRINTER_INFO_3(PyObject **dict, PRINTER_INFO_3 *info) -{ - PyObject *obj; - - *dict = from_struct(info, py_PRINTER_INFO_3); - - if (py_from_SECDESC(&obj, info->secdesc)) - PyDict_SetItemString(*dict, "security_descriptor", obj); - - PyDict_SetItemString(*dict, "level", PyInt_FromLong(3)); - - return True; -} - -BOOL py_to_PRINTER_INFO_3(PRINTER_INFO_3 *info, PyObject *dict, - TALLOC_CTX *mem_ctx) -{ - PyObject *obj; - - if (!to_struct(info, dict, py_PRINTER_INFO_3)) - return False; - - if (!(obj = PyDict_GetItemString(dict, "security_descriptor"))) - return False; - - if (!py_to_SECDESC(&info->secdesc, obj, mem_ctx)) - return False; - - return True; -} diff --git a/source/python/py_winreg.c b/source/python/py_winreg.c deleted file mode 100644 index ce27f5c533b..00000000000 --- a/source/python/py_winreg.c +++ /dev/null @@ -1,82 +0,0 @@ -/* - Python wrappers for DCERPC/SMB client routines. - - Copyright (C) Tim Potter, 2002 - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "python/py_winreg.h" - -static struct const_vals { - char *name; - uint32 value; -} module_const_vals[] = { - - /* Registry value types */ - - { "REG_NONE", REG_NONE }, - { "REG_SZ", REG_SZ }, - { "REG_EXPAND_SZ", REG_EXPAND_SZ }, - { "REG_BINARY", REG_BINARY }, - { "REG_DWORD", REG_DWORD }, - { "REG_DWORD_LE", REG_DWORD_LE }, - { "REG_DWORD_BE", REG_DWORD_BE }, - { "REG_LINK", REG_LINK }, - { "REG_MULTI_SZ", REG_MULTI_SZ }, - { "REG_RESOURCE_LIST", REG_RESOURCE_LIST }, - { "REG_FULL_RESOURCE_DESCRIPTOR", REG_FULL_RESOURCE_DESCRIPTOR }, - { "REG_RESOURCE_REQUIREMENTS_LIST", REG_RESOURCE_REQUIREMENTS_LIST }, - - { NULL }, -}; - -static void const_init(PyObject *dict) -{ - struct const_vals *tmp; - PyObject *obj; - - for (tmp = module_const_vals; tmp->name; tmp++) { - obj = PyInt_FromLong(tmp->value); - PyDict_SetItemString(dict, tmp->name, obj); - Py_DECREF(obj); - } -} - -/* - * Module initialisation - */ - -static PyMethodDef winreg_methods[] = { - { NULL } -}; - -void initwinreg(void) -{ - PyObject *module, *dict; - - /* Initialise module */ - - module = Py_InitModule("winreg", winreg_methods); - dict = PyModule_GetDict(module); - - /* Initialise constants */ - - const_init(dict); - - /* Do samba initialisation */ - - py_samba_init(); -} diff --git a/source/python/samba/.cvsignore b/source/python/samba/.cvsignore deleted file mode 100644 index 0d20b6487c6..00000000000 --- a/source/python/samba/.cvsignore +++ /dev/null @@ -1 +0,0 @@ -*.pyc diff --git a/source/python/samba/printerdata.py b/source/python/samba/printerdata.py deleted file mode 100644 index 33251f6a00f..00000000000 --- a/source/python/samba/printerdata.py +++ /dev/null @@ -1,59 +0,0 @@ -#!/usr/bin/env python - -# -# A python module that maps printerdata to a dictionary. We define -# two classes. The printerdata class maps to Get/Set/Enum/DeletePrinterData -# and the printerdata_ex class maps to Get/Set/Enum/DeletePrinterDataEx -# - -# -# TODO: -# -# - Implement __delitem__ -# - -from samba import spoolss - -class printerdata: - def __init__(self, host, creds = {}): - self.hnd = spoolss.openprinter(host, creds = creds) - - def keys(self): - return self.hnd.enumprinterdata().keys() - - def __getitem__(self, key): - return self.hnd.getprinterdata(key)['data'] - - def __setitem__(self, key, value): - # Store as REG_BINARY for now - self.hnd.setprinterdata({"key": "", "value": key, "type": 3, - "data": value}) - -class printerdata_ex: - def __init__(self, host): - self.host = host - self.top_level_keys = ["PrinterDriverData", "DsSpooler", "DsDriver", - "DsUser"] - - def keys(self): - return self.top_level_keys - - def has_key(self, key): - for k in self.top_level_keys: - if k == key: - return 1 - return 0 - - class printerdata_ex_subkey: - def __init__(self, host, key): - self.hnd = spoolss.openprinter(host) - self.key = key - - def keys(self): - return self.hnd.enumprinterdataex(self.key).keys() - - def __getitem__(self, key): - return self.hnd.getprinterdataex(self.key, key)['data'] - - def __getitem__(self, key): - return self.printerdata_ex_subkey(self.host, key) diff --git a/source/script/creategroup b/source/script/creategroup deleted file mode 100755 index 01fb0659444..00000000000 --- a/source/script/creategroup +++ /dev/null @@ -1,27 +0,0 @@ -#!/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/source/script/findstatic.pl b/source/script/findstatic.pl deleted file mode 100755 index 43a4916435d..00000000000 --- a/source/script/findstatic.pl +++ /dev/null @@ -1,70 +0,0 @@ -#!/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 - -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/source/script/installdat.sh b/source/script/installdat.sh deleted file mode 100755 index 7ff88ac788e..00000000000 --- a/source/script/installdat.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/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/source/script/mkinstalldirs b/source/script/mkinstalldirs deleted file mode 100755 index f945dbf2bce..00000000000 --- a/source/script/mkinstalldirs +++ /dev/null @@ -1,38 +0,0 @@ -#! /bin/sh -# mkinstalldirs --- make directory hierarchy -# Author: Noah Friedman -# 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/source/script/uninstallmodules.sh b/source/script/uninstallmodules.sh deleted file mode 100755 index 30582a39fac..00000000000 --- a/source/script/uninstallmodules.sh +++ /dev/null @@ -1,37 +0,0 @@ -#!/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/source/smbwrapper/smbw_cache.c b/source/smbwrapper/smbw_cache.c deleted file mode 100644 index fcb0eda8050..00000000000 --- a/source/smbwrapper/smbw_cache.c +++ /dev/null @@ -1,207 +0,0 @@ -/* - Unix SMB/CIFS implementation. - SMB wrapper directory functions - Copyright (C) Tim Potter 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 - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "includes.h" - -/* We cache lists of workgroups, lists of servers in workgroups, and lists - of shares exported by servers. */ - -#define CACHE_TIMEOUT 30 - -struct name_list { - struct name_list *prev, *next; - char *name; - uint32 stype; - char *comment; -}; - -struct cached_names { - struct cached_names *prev, *next; - char *key; - struct name_list *name_list; - time_t cache_timeout; - int result; -}; - -static struct cached_names *cached_names = NULL; - -/* Find a list of cached name for a workgroup, server or share list */ - -static struct cached_names *find_cached_names(char *key) -{ - struct cached_names *tmp; - - for (tmp = cached_names; tmp; tmp = tmp->next) { - if (strequal(tmp->key, key)) { - return tmp; - } - } - - return NULL; -} - -/* Add a name to a list stored in the state variable */ - -static void add_cached_names(const char *name, uint32 stype, - const char *comment, void *state) -{ - struct name_list **name_list = (struct name_list **)state; - struct name_list *new_name; - - new_name = (struct name_list *)malloc(sizeof(struct name_list)); - if (!new_name) return; - - ZERO_STRUCTP(new_name); - - new_name->name = strdup(name); - new_name->stype = stype; - new_name->comment = strdup(comment); - - DLIST_ADD(*name_list, new_name); -} - -static void free_name_list(struct name_list *name_list) -{ - struct name_list *tmp = name_list; - - while(tmp) { - struct name_list *next; - - next = tmp->next; - - SAFE_FREE(tmp->name); - SAFE_FREE(tmp->comment); - SAFE_FREE(tmp); - - tmp = next; - } -} - -/* Wrapper for NetServerEnum function */ - -BOOL smbw_NetServerEnum(struct cli_state *cli, char *workgroup, uint32 stype, - void (*fn)(const char *, uint32, const char *, void *), - void *state) -{ - struct cached_names *names; - struct name_list *tmp; - time_t now = time(NULL); - char key[PATH_MAX]; - BOOL result = True; - - slprintf(key, PATH_MAX - 1, "%s/%s#%s", cli->desthost, - workgroup, (stype == SV_TYPE_DOMAIN_ENUM ? "DOM" : "SRV")); - - names = find_cached_names(key); - - if (names == NULL || (now - names->cache_timeout) > CACHE_TIMEOUT) { - struct cached_names *new_names = NULL; - - /* No names cached for this workgroup */ - - if (names == NULL) { - new_names = (struct cached_names *) - malloc(sizeof(struct cached_names)); - - ZERO_STRUCTP(new_names); - DLIST_ADD(cached_names, new_names); - - } else { - - /* Dispose of out of date name list */ - - free_name_list(names->name_list); - names->name_list = NULL; - - new_names = names; - } - - result = cli_NetServerEnum(cli, workgroup, stype, - add_cached_names, - &new_names->name_list); - - new_names->cache_timeout = now; - new_names->result = result; - new_names->key = strdup(key); - - names = new_names; - } - - /* Return names by running callback function. */ - - for (tmp = names->name_list; tmp; tmp = tmp->next) - fn(tmp->name, stype, tmp->comment, state); - - return names->result; -} - -/* Wrapper for RNetShareEnum function */ - -int smbw_RNetShareEnum(struct cli_state *cli, - void (*fn)(const char *, uint32, const char *, void *), - void *state) -{ - struct cached_names *names; - struct name_list *tmp; - time_t now = time(NULL); - char key[PATH_MAX]; - - slprintf(key, PATH_MAX - 1, "SHARE/%s", cli->desthost); - - names = find_cached_names(key); - - if (names == NULL || (now - names->cache_timeout) > CACHE_TIMEOUT) { - struct cached_names *new_names = NULL; - - /* No names cached for this server */ - - if (names == NULL) { - new_names = (struct cached_names *) - malloc(sizeof(struct cached_names)); - - ZERO_STRUCTP(new_names); - DLIST_ADD(cached_names, new_names); - - } else { - - /* Dispose of out of date name list */ - - free_name_list(names->name_list); - names->name_list = NULL; - - new_names = names; - } - - new_names->result = cli_RNetShareEnum(cli, add_cached_names, - &new_names->name_list); - - new_names->cache_timeout = now; - new_names->key = strdup(key); - - names = new_names; - } - - /* Return names by running callback function. */ - - for (tmp = names->name_list; tmp; tmp = tmp->next) - fn(tmp->name, tmp->stype, tmp->comment, state); - - return names->result; -} diff --git a/source/tdb/tdb.magic b/source/tdb/tdb.magic deleted file mode 100644 index f5619e7327e..00000000000 --- a/source/tdb/tdb.magic +++ /dev/null @@ -1,10 +0,0 @@ -# Magic file(1) information about tdb files. -# -# Install this into /etc/magic or the corresponding location for your -# system, or pass as a -m argument to file(1). - -# You may use and redistribute this file without restriction. - -0 string TDB\ file TDB database ->32 lelong =0x2601196D version 6, little-endian ->>36 lelong x hash size %d bytes diff --git a/source/tdb/tdbutil.h b/source/tdb/tdbutil.h deleted file mode 100644 index 01473446a1c..00000000000 --- a/source/tdb/tdbutil.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - Unix SMB/CIFS implementation. - tdb utility functions - Copyright (C) Andrew Tridgell 1999 - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#ifndef __TDBUTIL_H__ -#define __TDBUTIL_H__ - - -/* single node of a list returned by tdb_search_keys */ -typedef struct keys_node -{ - struct keys_node *prev, *next; - TDB_DATA node_key; -} TDB_LIST_NODE; - - -TDB_LIST_NODE *tdb_search_keys(TDB_CONTEXT*, const char*); -void tdb_search_list_free(TDB_LIST_NODE*); - - -#endif /* __TDBUTIL_H__ */ diff --git a/source/tests/shlib.c b/source/tests/shlib.c deleted file mode 100644 index 761d9fd5c57..00000000000 --- a/source/tests/shlib.c +++ /dev/null @@ -1,6 +0,0 @@ -/* a trivial function used to test building shared libraries */ - -int foo(void) -{ - return 1; -} diff --git a/source/tests/unixsock.c b/source/tests/unixsock.c deleted file mode 100644 index f2765d68f67..00000000000 --- a/source/tests/unixsock.c +++ /dev/null @@ -1,93 +0,0 @@ -/* -*- c-file-style: "linux" -*- - * - * Try creating a Unix-domain socket, opening it, and reading from it. - * The POSIX name for these is AF_LOCAL/PF_LOCAL. - * - * This is used by the Samba autoconf scripts to detect systems which - * don't have Unix-domain sockets, such as (probably) VMS, or systems - * on which they are broken under some conditions, such as RedHat 7.0 - * (unpatched). We can't build WinBind there at the moment. - * - * Coding standard says to always use exit() for this, not return, so - * we do. - * - * Martin Pool , June 2000. */ - -/* TODO: Look for AF_LOCAL (most standard), AF_UNIX, and AF_FILE. */ - -#include - -#ifdef HAVE_SYS_SOCKET_H -# include -#endif - -#ifdef HAVE_SYS_UN_H -# include -#endif - -#ifdef HAVE_SYS_TYPES_H -# include -#endif - -#if HAVE_SYS_WAIT_H -# include -#endif - -#if HAVE_ERRNO_DECL -# include -#else -extern int errno; -#endif - -static int bind_socket(char const *filename) -{ - int sock_fd; - struct sockaddr_un name; - size_t size; - - /* Create the socket. */ - if ((sock_fd = socket(PF_LOCAL, SOCK_STREAM, 0)) < 0) { - perror ("socket(PF_LOCAL, SOCK_STREAM)"); - exit(1); - } - - /* Bind a name to the socket. */ - name.sun_family = AF_LOCAL; - strncpy(name.sun_path, filename, sizeof (name.sun_path)); - - /* The size of the address is - the offset of the start of the filename, - plus its length, - plus one for the terminating null byte. - Alternatively you can just do: - size = SUN_LEN (&name); - */ - size = SUN_LEN(&name); - /* XXX: This probably won't work on unfriendly libcs */ - - if (bind(sock_fd, (struct sockaddr *) &name, size) < 0) { - perror ("bind"); - exit(1); - } - - return sock_fd; -} - - -int main(void) -{ - int sock_fd; - int kid; - char const *filename = "conftest.unixsock.sock"; - - /* abolish hanging */ - alarm(15); /* secs */ - - if ((sock_fd = bind_socket(filename)) < 0) - exit(1); - - /* the socket will be deleted when autoconf cleans up these - files. */ - - exit(0); -} diff --git a/source/torture/samtest.h b/source/torture/samtest.h deleted file mode 100644 index a136ab191e4..00000000000 --- a/source/torture/samtest.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - Unix SMB/CIFS implementation. - SAM module tester - - Copyright (C) Jelmer Vernooij 2002 - - Most of this code was ripped off of rpcclient. - Copyright (C) Tim Potter 2000-2001 - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -struct samtest_state { - SAM_CONTEXT *context; - NT_USER_TOKEN *token; -}; - -struct cmd_set { - char *name; - NTSTATUS (*fn)(struct samtest_state *sam, TALLOC_CTX *mem_ctx, int argc, - char **argv); - char *description; - char *usage; -}; - - diff --git a/source/utils/.cvsignore b/source/utils/.cvsignore deleted file mode 100644 index 6b8749f64eb..00000000000 --- a/source/utils/.cvsignore +++ /dev/null @@ -1 +0,0 @@ -net_proto.h \ No newline at end of file diff --git a/source/web/neg_lang.c b/source/web/neg_lang.c deleted file mode 100644 index da974f78a4a..00000000000 --- a/source/web/neg_lang.c +++ /dev/null @@ -1,117 +0,0 @@ -/* - Unix SMB/CIFS implementation. - SWAT language handling - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - - Created by Ryo Kawahara -*/ - -#include "includes.h" -#include "../web/swat_proto.h" - -/* - during a file download we first check to see if there is a language - specific file available. If there is then use that, otherwise - just open the specified file -*/ -int web_open(const char *fname, int flags, mode_t mode) -{ - char *p = NULL; - char *lang = lang_tdb_current(); - int fd; - if (lang) { - asprintf(&p, "lang/%s/%s", lang, fname); - if (p) { - fd = sys_open(p, flags, mode); - free(p); - if (fd != -1) { - return fd; - } - } - } - - /* fall through to default name */ - return sys_open(fname, flags, mode); -} - - -struct pri_list { - float pri; - char *string; -}; - -static int qsort_cmp_list(const void *x, const void *y) { - struct pri_list *a = (struct pri_list *)x; - struct pri_list *b = (struct pri_list *)y; - if (a->pri > b->pri) return -1; - if (a->pri == b->pri) return 0; - return 1; -} - -/* - choose from a list of languages. The list can be comma or space - separated - Keep choosing until we get a hit - Changed to habdle priority -- Simo -*/ - -void web_set_lang(const char *lang_string) -{ - char **lang_list, **count; - struct pri_list *pl; - int lang_num, i; - - /* build the lang list */ - lang_list = str_list_make(lang_string, ", \t\r\n"); - if (!lang_list) return; - - /* sort the list by priority */ - lang_num = 0; - count = lang_list; - while (*count && **count) { - count++; - lang_num++; - } - pl = (struct pri_list *)malloc(sizeof(struct pri_list) * lang_num); - for (i = 0; i < lang_num; i++) { - char *pri_code; - if ((pri_code=strstr(lang_list[i], ";q="))) { - *pri_code = '\0'; - pri_code += 3; - sscanf(pri_code, "%f", &(pl[i].pri)); - } else { - pl[i].pri = 1; - } - pl[i].string = strdup(lang_list[i]); - } - str_list_free(&lang_list); - - qsort(pl, lang_num, sizeof(struct pri_list), &qsort_cmp_list); - - /* it's not an error to not initialise - we just fall back to - the default */ - - for (i = 0; i < lang_num; i++) { - if (lang_tdb_init(pl[i].string)) break; - } - - for (i = 0; i < lang_num; i++) { - SAFE_FREE(pl[i].string); - } - SAFE_FREE(pl); - - return; -} diff --git a/source/wrepld/parser.c b/source/wrepld/parser.c deleted file mode 100644 index b619cb0cef5..00000000000 --- a/source/wrepld/parser.c +++ /dev/null @@ -1,759 +0,0 @@ -/* - * Unix SMB/CIFS implementation. - * RPC Pipe client / server routines - * Copyright (C) Jean François Micouleau 1998-2002. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include "includes.h" -#include "wins_repl.h" - -extern TALLOC_CTX *mem_ctx; - -/**************************************************************************** -grow the send buffer if necessary -****************************************************************************/ -BOOL grow_buffer(struct BUFFER *buffer, int more) -{ - char *temp; - - DEBUG(10,("grow_buffer: size is: %d offet is:%d growing by %d\n", buffer->length, buffer->offset, more)); - - /* grow by at least 256 bytes */ - if (more<256) - more=256; - - if (buffer->offset+more >= buffer->length) { - temp=(char *)talloc_realloc(mem_ctx, buffer->buffer, sizeof(char)* (buffer->length+more) ); - if (temp==NULL) { - DEBUG(0,("grow_buffer: can't grow buffer\n")); - return False; - } - buffer->length+=more; - buffer->buffer=temp; - } - - return True; -} - -/**************************************************************************** -check if the buffer has that much data -****************************************************************************/ -static BOOL check_buffer(struct BUFFER *buffer, int more) -{ - DEBUG(10,("check_buffer: size is: %d offet is:%d growing by %d\n", buffer->length, buffer->offset, more)); - - if (buffer->offset+more > buffer->length) { - DEBUG(10,("check_buffer: buffer smaller than requested, size is: %d needed: %d\n", buffer->length, buffer->offset+more)); - return False; - } - - return True; -} - -/**************************************************************************** -decode a WINS_OWNER struct -****************************************************************************/ -static void decode_wins_owner(struct BUFFER *inbuf, WINS_OWNER *wins_owner) -{ - if(!check_buffer(inbuf, 24)) - return; - - wins_owner->address.s_addr=IVAL(inbuf->buffer, inbuf->offset); - wins_owner->max_version=((SMB_BIG_UINT)RIVAL(inbuf->buffer, inbuf->offset+4))<<32; - wins_owner->max_version|=RIVAL(inbuf->buffer, inbuf->offset+8); - wins_owner->min_version=((SMB_BIG_UINT)RIVAL(inbuf->buffer, inbuf->offset+12))<<32; - wins_owner->min_version|=RIVAL(inbuf->buffer, inbuf->offset+16); - wins_owner->type=RIVAL(inbuf->buffer, inbuf->offset+20); - inbuf->offset+=24; - -} - -/**************************************************************************** -decode a WINS_NAME struct -****************************************************************************/ -static void decode_wins_name(struct BUFFER *outbuf, WINS_NAME *wins_name) -{ - char *p; - int i; - - if(!check_buffer(outbuf, 40)) - return; - - wins_name->name_len=RIVAL(outbuf->buffer, outbuf->offset); - outbuf->offset+=4; - memcpy(wins_name->name,outbuf->buffer+outbuf->offset, 15); - wins_name->name[15]='\0'; - if((p = strchr(wins_name->name,' ')) != NULL) - *p = 0; - - outbuf->offset+=15; - - wins_name->type=(int)outbuf->buffer[outbuf->offset++]; - - /* - * fix to bug in WINS replication, - * present in all versions including W2K SP2 ! - */ - if (wins_name->name[0]==0x1B) { - wins_name->name[0]=(char)wins_name->type; - wins_name->type=0x1B; - } - - wins_name->empty=RIVAL(outbuf->buffer, outbuf->offset); - outbuf->offset+=4; - - wins_name->name_flag=RIVAL(outbuf->buffer, outbuf->offset); - outbuf->offset+=4; - wins_name->group_flag=RIVAL(outbuf->buffer, outbuf->offset); - outbuf->offset+=4; - wins_name->id=((SMB_BIG_UINT)RIVAL(outbuf->buffer, outbuf->offset))<<32; - outbuf->offset+=4; - wins_name->id|=RIVAL(outbuf->buffer, outbuf->offset); - outbuf->offset+=4; - - /* special groups have multiple address */ - if (wins_name->name_flag & 2) { - if(!check_buffer(outbuf, 4)) - return; - wins_name->num_ip=IVAL(outbuf->buffer, outbuf->offset); - outbuf->offset+=4; - } - else - wins_name->num_ip=1; - - if(!check_buffer(outbuf, 4)) - return; - wins_name->owner.s_addr=IVAL(outbuf->buffer, outbuf->offset); - outbuf->offset+=4; - - if (wins_name->name_flag & 2) { - wins_name->others=(struct in_addr *)talloc(mem_ctx, sizeof(struct in_addr)*wins_name->num_ip); - if (wins_name->others==NULL) - return; - - if(!check_buffer(outbuf, 4*wins_name->num_ip)) - return; - for (i=0; inum_ip; i++) { - wins_name->others[i].s_addr=IVAL(outbuf->buffer, outbuf->offset); - outbuf->offset+=4; - } - } - - if(!check_buffer(outbuf, 4)) - return; - wins_name->foo=RIVAL(outbuf->buffer, outbuf->offset); - outbuf->offset+=4; - -} - -/**************************************************************************** -decode a update notification request -****************************************************************************/ -static void decode_update_notify_request(struct BUFFER *inbuf, UPDATE_NOTIFY_REQUEST *un_rq) -{ - int i; - - if(!check_buffer(inbuf, 4)) - return; - un_rq->partner_count=RIVAL(inbuf->buffer, inbuf->offset); - inbuf->offset+=4; - - un_rq->wins_owner=(WINS_OWNER *)talloc(mem_ctx, un_rq->partner_count*sizeof(WINS_OWNER)); - if (un_rq->wins_owner==NULL) - return; - - for (i=0; ipartner_count; i++) - decode_wins_owner(inbuf, &un_rq->wins_owner[i]); - - if(!check_buffer(inbuf, 4)) - return; - un_rq->initiating_wins_server.s_addr=IVAL(inbuf->buffer, inbuf->offset); - inbuf->offset+=4; -} - -/**************************************************************************** -decode a send entries request -****************************************************************************/ -static void decode_send_entries_request(struct BUFFER *inbuf, SEND_ENTRIES_REQUEST *se_rq) -{ - decode_wins_owner(inbuf, &se_rq->wins_owner); -} - -/**************************************************************************** -decode a send entries reply -****************************************************************************/ -static void decode_send_entries_reply(struct BUFFER *inbuf, SEND_ENTRIES_REPLY *se_rp) -{ - int i; - - if(!check_buffer(inbuf, 4)) - return; - se_rp->max_names = RIVAL(inbuf->buffer, inbuf->offset); - inbuf->offset+=4; - - se_rp->wins_name=(WINS_NAME *)talloc(mem_ctx, se_rp->max_names*sizeof(WINS_NAME)); - if (se_rp->wins_name==NULL) - return; - - for (i=0; imax_names; i++) - decode_wins_name(inbuf, &se_rp->wins_name[i]); -} - -/**************************************************************************** -decode a add version number map table reply -****************************************************************************/ -static void decode_add_version_number_map_table_reply(struct BUFFER *inbuf, AVMT_REP *avmt_rep) -{ - int i; - - if(!check_buffer(inbuf, 4)) - return; - - avmt_rep->partner_count=RIVAL(inbuf->buffer, inbuf->offset); - inbuf->offset+=4; - - avmt_rep->wins_owner=(WINS_OWNER *)talloc(mem_ctx, avmt_rep->partner_count*sizeof(WINS_OWNER)); - if (avmt_rep->wins_owner==NULL) - return; - - for (i=0; ipartner_count; i++) - decode_wins_owner(inbuf, &avmt_rep->wins_owner[i]); - - if(!check_buffer(inbuf, 4)) - return; - avmt_rep->initiating_wins_server.s_addr=IVAL(inbuf->buffer, inbuf->offset); - inbuf->offset+=4; -} - -/**************************************************************************** -decode a replicate packet and fill a structure -****************************************************************************/ -static void decode_replicate(struct BUFFER *inbuf, REPLICATE *rep) -{ - if(!check_buffer(inbuf, 4)) - return; - - rep->msg_type = RIVAL(inbuf->buffer, inbuf->offset); - - inbuf->offset+=4; - - switch (rep->msg_type) { - case 0: - break; - case 1: - /* add version number map table reply */ - decode_add_version_number_map_table_reply(inbuf, &rep->avmt_rep); - break; - case 2: - /* send entry request */ - decode_send_entries_request(inbuf, &rep->se_rq); - break; - case 3: - /* send entry request */ - decode_send_entries_reply(inbuf, &rep->se_rp); - break; - case 4: - /* update notification request */ - decode_update_notify_request(inbuf, &rep->un_rq); - break; - default: - DEBUG(0,("decode_replicate: unknown message type:%d\n", rep->msg_type)); - break; - } -} - -/**************************************************************************** -read the generic header and fill the struct. -****************************************************************************/ -static void read_generic_header(struct BUFFER *inbuf, generic_header *q) -{ - if(!check_buffer(inbuf, 16)) - return; - - q->data_size = RIVAL(inbuf->buffer, inbuf->offset+0); - q->opcode = RIVAL(inbuf->buffer, inbuf->offset+4); - q->assoc_ctx = RIVAL(inbuf->buffer, inbuf->offset+8); - q->mess_type = RIVAL(inbuf->buffer, inbuf->offset+12); -} - -/******************************************************************* -decode a start association request -********************************************************************/ -static void decode_start_assoc_request(struct BUFFER *inbuf, START_ASSOC_REQUEST *q) -{ - if(!check_buffer(inbuf, 8)) - return; - - q->assoc_ctx = RIVAL(inbuf->buffer, inbuf->offset+0); - q->min_ver = RSVAL(inbuf->buffer, inbuf->offset+4); - q->maj_ver = RSVAL(inbuf->buffer, inbuf->offset+6); -} - -/******************************************************************* -decode a start association reply -********************************************************************/ -static void decode_start_assoc_reply(struct BUFFER *inbuf, START_ASSOC_REPLY *r) -{ - if(!check_buffer(inbuf, 8)) - return; - - r->assoc_ctx=RIVAL(inbuf->buffer, inbuf->offset+0); - r->min_ver = RSVAL(inbuf->buffer, inbuf->offset+4); - r->maj_ver = RSVAL(inbuf->buffer, inbuf->offset+6); -} - -/******************************************************************* -decode a start association reply -********************************************************************/ -static void decode_stop_assoc(struct BUFFER *inbuf, STOP_ASSOC *r) -{ - if(!check_buffer(inbuf, 4)) - return; - - r->reason=RIVAL(inbuf->buffer, inbuf->offset); -} - -/**************************************************************************** -decode a packet and fill a generic structure -****************************************************************************/ -void decode_generic_packet(struct BUFFER *inbuf, GENERIC_PACKET *q) -{ - read_generic_header(inbuf, &q->header); - - inbuf->offset+=16; - - switch (q->header.mess_type) { - case 0: - decode_start_assoc_request(inbuf, &q->sa_rq); - break; - case 1: - decode_start_assoc_reply(inbuf, &q->sa_rp); - break; - case 2: - decode_stop_assoc(inbuf, &q->so); - break; - case 3: - decode_replicate(inbuf, &q->rep); - break; - default: - DEBUG(0,("decode_generic_packet: unknown message type:%d\n", q->header.mess_type)); - break; - } -} - -/**************************************************************************** -encode a WINS_OWNER struct -****************************************************************************/ -static void encode_wins_owner(struct BUFFER *outbuf, WINS_OWNER *wins_owner) -{ - if (!grow_buffer(outbuf, 24)) - return; - - SIVAL(outbuf->buffer, outbuf->offset, wins_owner->address.s_addr); - outbuf->offset+=4; - RSIVAL(outbuf->buffer, outbuf->offset, (int)(wins_owner->max_version>>32)); - outbuf->offset+=4; - RSIVAL(outbuf->buffer, outbuf->offset, (int)(wins_owner->max_version&0xffffffff)); - outbuf->offset+=4; - RSIVAL(outbuf->buffer, outbuf->offset, wins_owner->min_version>>32); - outbuf->offset+=4; - RSIVAL(outbuf->buffer, outbuf->offset, wins_owner->min_version&0xffffffff); - outbuf->offset+=4; - RSIVAL(outbuf->buffer, outbuf->offset, wins_owner->type); - outbuf->offset+=4; - -} - -/**************************************************************************** -encode a WINS_NAME struct -****************************************************************************/ -static void encode_wins_name(struct BUFFER *outbuf, WINS_NAME *wins_name) -{ - int i; - - if (!grow_buffer(outbuf, 48+(4*wins_name->num_ip))) - return; - - RSIVAL(outbuf->buffer, outbuf->offset, wins_name->name_len); - outbuf->offset+=4; - - memset(outbuf->buffer+outbuf->offset, ' ', 15); - - /* to prevent copying the leading \0 */ - memcpy(outbuf->buffer+outbuf->offset, wins_name->name, strlen(wins_name->name)); - outbuf->offset+=15; - - outbuf->buffer[outbuf->offset++]=(char)wins_name->type; - - RSIVAL(outbuf->buffer, outbuf->offset, wins_name->empty); - outbuf->offset+=4; - - RSIVAL(outbuf->buffer, outbuf->offset, wins_name->name_flag); - outbuf->offset+=4; - RSIVAL(outbuf->buffer, outbuf->offset, wins_name->group_flag); - outbuf->offset+=4; - RSIVAL(outbuf->buffer, outbuf->offset, wins_name->id>>32); - outbuf->offset+=4; - RSIVAL(outbuf->buffer, outbuf->offset, wins_name->id); - outbuf->offset+=4; - - if (wins_name->name_flag & 2) { - SIVAL(outbuf->buffer, outbuf->offset, wins_name->num_ip); - outbuf->offset+=4; - } - - SIVAL(outbuf->buffer, outbuf->offset, wins_name->owner.s_addr); - outbuf->offset+=4; - - if (wins_name->name_flag & 2) { - for (i=0;inum_ip;i++) { - SIVAL(outbuf->buffer, outbuf->offset, wins_name->others[i].s_addr); - outbuf->offset+=4; - } - } - - RSIVAL(outbuf->buffer, outbuf->offset, wins_name->foo); - outbuf->offset+=4; -} - -/**************************************************************************** -encode a update notification request -****************************************************************************/ -static void encode_update_notify_request(struct BUFFER *outbuf, UPDATE_NOTIFY_REQUEST *un_rq) -{ - int i; - - if (!grow_buffer(outbuf, 8)) - return; - - RSIVAL(outbuf->buffer, outbuf->offset, un_rq->partner_count); - outbuf->offset+=4; - - for (i=0; ipartner_count; i++) - encode_wins_owner(outbuf, &un_rq->wins_owner[i]); - - SIVAL(outbuf->buffer, outbuf->offset, un_rq->initiating_wins_server.s_addr); - outbuf->offset+=4; - -} - -/**************************************************************************** -decode a send entries request -****************************************************************************/ -static void encode_send_entries_request(struct BUFFER *outbuf, SEND_ENTRIES_REQUEST *se_rq) -{ - encode_wins_owner(outbuf, &se_rq->wins_owner); -} - -/**************************************************************************** -decode a send entries reply -****************************************************************************/ -static void encode_send_entries_reply(struct BUFFER *outbuf, SEND_ENTRIES_REPLY *se_rp) -{ - int i; - - if (!grow_buffer(outbuf, 4)) - return; - - RSIVAL(outbuf->buffer, outbuf->offset, se_rp->max_names); - outbuf->offset+=4; - - for (i=0; imax_names; i++) - encode_wins_name(outbuf, &se_rp->wins_name[i]); - -} - -/**************************************************************************** -encode a add version number map table reply -****************************************************************************/ -static void encode_add_version_number_map_table_reply(struct BUFFER *outbuf, AVMT_REP *avmt_rep) -{ - int i; - - if (!grow_buffer(outbuf, 8)) - return; - - RSIVAL(outbuf->buffer, outbuf->offset, avmt_rep->partner_count); - outbuf->offset+=4; - - for (i=0; ipartner_count; i++) - encode_wins_owner(outbuf, &avmt_rep->wins_owner[i]); - - SIVAL(outbuf->buffer, outbuf->offset, avmt_rep->initiating_wins_server.s_addr); - outbuf->offset+=4; - -} - -/**************************************************************************** -decode a replicate packet and fill a structure -****************************************************************************/ -static void encode_replicate(struct BUFFER *outbuf, REPLICATE *rep) -{ - if (!grow_buffer(outbuf, 4)) - return; - - RSIVAL(outbuf->buffer, outbuf->offset, rep->msg_type); - outbuf->offset+=4; - - switch (rep->msg_type) { - case 0: - break; - case 1: - /* add version number map table reply */ - encode_add_version_number_map_table_reply(outbuf, &rep->avmt_rep); - break; - case 2: - /* send entry request */ - encode_send_entries_request(outbuf, &rep->se_rq); - break; - case 3: - /* send entry request */ - encode_send_entries_reply(outbuf, &rep->se_rp); - break; - case 4: - /* update notification request */ - encode_update_notify_request(outbuf, &rep->un_rq); - break; - default: - DEBUG(0,("encode_replicate: unknown message type:%d\n", rep->msg_type)); - break; - } -} - -/**************************************************************************** -write the generic header. -****************************************************************************/ -static void write_generic_header(struct BUFFER *outbuf, generic_header *r) -{ - RSIVAL(outbuf->buffer, 0, r->data_size); - RSIVAL(outbuf->buffer, 4, r->opcode); - RSIVAL(outbuf->buffer, 8, r->assoc_ctx); - RSIVAL(outbuf->buffer,12, r->mess_type); -} - -/******************************************************************* -decode a start association request -********************************************************************/ -static void encode_start_assoc_request(struct BUFFER *outbuf, START_ASSOC_REQUEST *q) -{ - if (!grow_buffer(outbuf, 45)) - return; - - RSIVAL(outbuf->buffer, outbuf->offset, q->assoc_ctx); - RSSVAL(outbuf->buffer, outbuf->offset+4, q->min_ver); - RSSVAL(outbuf->buffer, outbuf->offset+6, q->maj_ver); - - outbuf->offset=45; -} - -/******************************************************************* -decode a start association reply -********************************************************************/ -static void encode_start_assoc_reply(struct BUFFER *outbuf, START_ASSOC_REPLY *r) -{ - if (!grow_buffer(outbuf, 45)) - return; - - RSIVAL(outbuf->buffer, outbuf->offset, r->assoc_ctx); - RSSVAL(outbuf->buffer, outbuf->offset+4, r->min_ver); - RSSVAL(outbuf->buffer, outbuf->offset+6, r->maj_ver); - - outbuf->offset=45; -} - -/******************************************************************* -decode a start association reply -********************************************************************/ -static void encode_stop_assoc(struct BUFFER *outbuf, STOP_ASSOC *r) -{ - if (!grow_buffer(outbuf, 44)) - return; - - RSIVAL(outbuf->buffer, outbuf->offset, r->reason); - - outbuf->offset=44; -} - -/**************************************************************************** -write the generic header size. -****************************************************************************/ -static void write_generic_header_size(generic_header *r, int size) -{ - /* the buffer size is the total size minus the size field */ - r->data_size=size-4; -} - -/**************************************************************************** -encode a packet and read a generic structure -****************************************************************************/ -void encode_generic_packet(struct BUFFER *outbuf, GENERIC_PACKET *q) -{ - if (!grow_buffer(outbuf, 16)) - return; - - outbuf->offset=16; - - switch (q->header.mess_type) { - case 0: - encode_start_assoc_request(outbuf, &q->sa_rq); - break; - case 1: - encode_start_assoc_reply(outbuf, &q->sa_rp); - break; - case 2: - encode_stop_assoc(outbuf, &q->so); - break; - case 3: - encode_replicate(outbuf, &q->rep); - break; - default: - DEBUG(0,("encode_generic_packet: unknown message type:%d\n", q->header.mess_type)); - break; - } - - write_generic_header_size(&q->header, outbuf->offset); - write_generic_header(outbuf, &q->header); -} - - -/**************************************************************************** -dump a WINS_OWNER structure -****************************************************************************/ -static void dump_wins_owner(WINS_OWNER *wins_owner) -{ - DEBUGADD(10,("\t\t\t\taddress : %s\n", inet_ntoa(wins_owner->address))); - DEBUGADD(10,("\t\t\t\tmax version: %d\n", (int)wins_owner->max_version)); - DEBUGADD(10,("\t\t\t\tmin version: %d\n", (int)wins_owner->min_version)); - DEBUGADD(10,("\t\t\t\ttype : %d\n", wins_owner->type)); -} - -/**************************************************************************** -dump a WINS_NAME structure -****************************************************************************/ -static void dump_wins_name(WINS_NAME *wins_name) -{ - fstring name; - int i; - - strncpy(name, wins_name->name, 15); - - DEBUGADD(10,("name: %d, %s<%02x> %x,%x, %d %s %d ", wins_name->name_len, name, wins_name->type, - wins_name->name_flag, wins_name->group_flag, (int)wins_name->id, - inet_ntoa(wins_name->owner), wins_name->num_ip)); - - if (wins_name->num_ip!=1) - for (i=0; inum_ip; i++) - DEBUGADD(10,("%s ", inet_ntoa(wins_name->others[i]))); - - DEBUGADD(10,("\n")); -} - -/**************************************************************************** -dump a replicate structure -****************************************************************************/ -static void dump_replicate(REPLICATE *rep) -{ - int i; - - DEBUGADD(5,("\t\tmsg_type: %d ", rep->msg_type)); - - switch (rep->msg_type) { - case 0: - DEBUGADD(5,("(Add Version Map Table Request)\n")); - break; - case 1: - DEBUGADD(5,("(Add Version Map Table Reply)\n")); - DEBUGADD(5,("\t\t\tpartner_count : %d\n", rep->avmt_rep.partner_count)); - for (i=0; iavmt_rep.partner_count; i++) - dump_wins_owner(&rep->avmt_rep.wins_owner[i]); - DEBUGADD(5,("\t\t\tinitiating_wins_server: %s\n", inet_ntoa(rep->avmt_rep.initiating_wins_server))); - break; - case 2: - DEBUGADD(5,("(Send Entries Request)\n")); - dump_wins_owner(&rep->se_rq.wins_owner); - break; - case 3: - DEBUGADD(5,("(Send Entries Reply)\n")); - DEBUGADD(5,("\t\t\tmax_names : %d\n", rep->se_rp.max_names)); - for (i=0; ise_rp.max_names; i++) - dump_wins_name(&rep->se_rp.wins_name[i]); - break; - case 4: - DEBUGADD(5,("(Update Notify Request)\n")); - DEBUGADD(5,("\t\t\tpartner_count : %d\n", rep->un_rq.partner_count)); - for (i=0; iun_rq.partner_count; i++) - dump_wins_owner(&rep->un_rq.wins_owner[i]); - DEBUGADD(5,("\t\t\tinitiating_wins_server: %s\n", inet_ntoa(rep->un_rq.initiating_wins_server))); - break; - default: - DEBUG(5,("\n")); - break; - } -} - -/**************************************************************************** -dump a generic structure -****************************************************************************/ -void dump_generic_packet(GENERIC_PACKET *q) -{ - DEBUG(5,("dump_generic_packet:\n")); - DEBUGADD(5,("\tdata_size: %08x\n", q->header.data_size)); - DEBUGADD(5,("\topcode : %08x\n", q->header.opcode)); - DEBUGADD(5,("\tassoc_ctx: %08x\n", q->header.assoc_ctx)); - DEBUGADD(5,("\tmess_type: %08x ", q->header.mess_type)); - - switch (q->header.mess_type) { - case 0: - DEBUGADD(5,("(Start Association Request)\n")); - DEBUGADD(5,("\t\tassoc_ctx: %08x\n", q->sa_rq.assoc_ctx)); - DEBUGADD(5,("\t\tmin_ver : %04x\n", q->sa_rq.min_ver)); - DEBUGADD(5,("\t\tmaj_ver : %04x\n", q->sa_rq.maj_ver)); - break; - case 1: - DEBUGADD(5,("(Start Association Reply)\n")); - DEBUGADD(5,("\t\tassoc_ctx: %08x\n", q->sa_rp.assoc_ctx)); - DEBUGADD(5,("\t\tmin_ver : %04x\n", q->sa_rp.min_ver)); - DEBUGADD(5,("\t\tmaj_ver : %04x\n", q->sa_rp.maj_ver)); - break; - case 2: - DEBUGADD(5,("(Stop Association)\n")); - DEBUGADD(5,("\t\treason: %08x\n", q->so.reason)); - break; - case 3: - DEBUGADD(5,("(Replication Message)\n")); - dump_replicate(&q->rep); - break; - default: - DEBUG(5,("\n")); - break; - } - -} - -/**************************************************************************** -generate a stop packet -****************************************************************************/ -void stop_packet(GENERIC_PACKET *q, GENERIC_PACKET *r, int reason) -{ - r->header.opcode=OPCODE_NON_NBT; - r->header.assoc_ctx=get_server_assoc(q->header.assoc_ctx); - r->header.mess_type=MESSAGE_TYPE_STOP_ASSOC; - r->so.reason=reason; - -} - - diff --git a/source/wrepld/partners.c b/source/wrepld/partners.c deleted file mode 100644 index 2387f5b45f6..00000000000 --- a/source/wrepld/partners.c +++ /dev/null @@ -1,200 +0,0 @@ -/* - Unix SMB/CIFS implementation. - process incoming packets - main loop - Copyright (C) Jean François Micouleau 1998-2002. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "includes.h" -#include "wins_repl.h" - -/* we can exchange info with 64 partners at any given time */ -WINS_PARTNER current_partners[64]; -int total_current_partners; - -/******************************************************************* -verify if we know this partner -********************************************************************/ -BOOL check_partner(int assoc) -{ - int i; - - DEBUG(5,("check_partner: total_current_partners: %d\n", total_current_partners)); - - for (i=0; is_addr=current_partners[i].partner_server.s_addr; - server->s_addr=current_partners[i].other_server.s_addr; - return True; - } - - return False; -} - - diff --git a/source/wrepld/socket.c b/source/wrepld/socket.c deleted file mode 100644 index 3d759f0ab89..00000000000 --- a/source/wrepld/socket.c +++ /dev/null @@ -1,69 +0,0 @@ -/* - Unix SMB/CIFS implementation. - process incoming packets - main loop - Copyright (C) Jean François Micouleau 1998-2002. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "includes.h" -#include "wins_repl.h" - -fd_set *listen_set = NULL; -int listen_number = 0; -int *sock_array = NULL; - -/******************************************************************* - Add an fd from the sock_array -******************************************************************/ -void add_fd_to_sock_array(int fd) -{ - int *temp_sock=NULL; - - temp_sock=(int *)Realloc(sock_array, (listen_number+1)*sizeof(int)); - if (temp_sock==NULL) - return; - - sock_array=temp_sock; - sock_array[listen_number]=fd; - listen_number++; -} - - -/******************************************************************* - Remove an fd from the sock_array -******************************************************************/ -void remove_fd_from_sock_array(int fd) -{ - int i,j; - - for (i=0; sock_array[i]!=fd && i