/*
Unix SMB/Netbios implementation.
- Version 1.9.
- SMB parameters and setup
+ SMB parameters and setup, plus a whole lot more.
+
Copyright (C) Andrew Tridgell 1992-2000
Copyright (C) John H Terpstra 1996-2000
Copyright (C) Luke Kenneth Casson Leighton 1996-2000
Copyright (C) Paul Ashton 1998-2000
+ Copyright (C) Martin Pool 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
#include "doserr.h"
+
+
#ifndef _PSTRING
#define PSTRING_LEN 1024
#define FSTRING_LEN 256
+#ifdef PSTRING_SANCTIFY
+
+/* If you define this, pstring and fstring become distinguished types,
+ * so that it's harder to accidentally overflow them by for example
+ * passing an fstring on the lhs of pstrcpy.
+ *
+ * The types are defined as one-element union arrays so that with
+ * "fstring f" the name "f" will be a pointer and with a big hammer
+ * you can cast it to (char *). So code that tries to just use it
+ * directly will get a loud warning, but hopefully nothing worse.
+ *
+ * To pass them to non-pstring-aware functions, use PSTR and check
+ * that the function takes a const. They should almost never be
+ * modified except by special calls. In those unusual cases, use
+ * PSTR_MUTABLE.
+ *
+ * This is off by default so as not to produce too many warnings. As
+ * the code is vetted it can become the default. */
+
+typedef union { char pstring_contents[PSTRING_LEN]; } pstring[1];
+typedef union { char fstring_contents[FSTRING_LEN]; } fstring[1];
+
+# define PSTR(p) ((const char *) ((p)->pstring_contents))
+# define FSTR(f) ((const char *) ((f)->fstring_contents))
+
+/* You should not normally use these. Instead, use pstrcpy, etc. */
+# define PSTR_MUTABLE(p) ((p)->pstring_contents)
+# define FSTR_MUTABLE(f) ((f)->fstring_contents)
+
+/* See also safe_string.h */
+
+#else /* ndef PSTRING_SANCTIFY */
+
+/* Old interface. */
+
typedef char pstring[PSTRING_LEN];
typedef char fstring[FSTRING_LEN];
+#define PSTR(p) (p)
+#define FSTR(f) (f)
+#define PSTR_MUTABLE(p) (p)
+#define FSTR_MUTABLE(f) (f)
+
+#endif /* ndef PSTRING_SANCTIFY */
+
#define _PSTRING
-#endif
+#endif /* ndef _PSTRING */
+
+
/*
* SMB UCS2 (16-bit unicode) internal type.
} files_struct;
/* used to hold an arbitrary blob of data */
-typedef struct {
+typedef struct data_blob {
uint8 *data;
size_t length;
+ void (*free)(struct data_blob *data_blob);
} DATA_BLOB;
/*
typedef struct sam_passwd
{
- struct {
+ TALLOC_CTX *mem_ctx;
+
+ void (*free_fn)(struct sam_passwd **);
+
+ struct user_data {
/* initiailization flags */
uint32 init_flag;
time_t pass_can_change_time; /* password can change time */
time_t pass_must_change_time; /* password must change time */
- pstring username; /* UNIX username string */
- pstring domain; /* Windows Domain name */
- pstring nt_username; /* Windows username string */
- pstring full_name; /* user's full name string */
- pstring home_dir; /* home directory string */
- pstring dir_drive; /* home directory drive string */
- pstring logon_script; /* logon script string */
- pstring profile_path; /* profile path string */
- pstring acct_desc ; /* user description string */
- pstring workstations; /* login from workstations string */
- pstring unknown_str ; /* don't know what this is, yet. */
- pstring munged_dial ; /* munged path name and dial-back tel number */
+ char * username; /* UNIX username string */
+ char * domain; /* Windows Domain name */
+ char * nt_username; /* Windows username string */
+ char * full_name; /* user's full name string */
+ char * home_dir; /* home directory string */
+ char * dir_drive; /* home directory drive string */
+ char * logon_script; /* logon script string */
+ char * profile_path; /* profile path string */
+ char * acct_desc ; /* user description string */
+ char * workstations; /* login from workstations string */
+ char * unknown_str ; /* don't know what this is, yet. */
+ char * munged_dial ; /* munged path name and dial-back tel number */
uid_t uid; /* this is a unix uid_t */
gid_t gid; /* this is a unix gid_t */
#define CAP_W2K_SMBS 0x2000
#define CAP_LARGE_READX 0x4000
#define CAP_LARGE_WRITEX 0x8000
+#define CAP_UNIX 0x800000 /* Capabilities for UNIX extensions. Created by HP. */
#define CAP_EXTENDED_SECURITY 0x80000000
/* protocol types. It assumes that higher protocols include lower protocols