summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean-François Micouleau <jfm@samba.org>2000-02-07 16:22:16 +0000
committerJean-François Micouleau <jfm@samba.org>2000-02-07 16:22:16 +0000
commitb81dc7b7f832cae2e66076398a134fbb6c1f78ca (patch)
tree7651c119720fd5cb3dbb09326563f440a04256b3
parentbd9d4cdde9193c120c6f4e8cf72f87cd67a9387e (diff)
downloadsamba-b81dc7b7f832cae2e66076398a134fbb6c1f78ca.tar.gz
Jeremy can you check lib/util_unistr.c for codepages support ?
I added 2 UNICODE <-> ASCII functions which _don't_ honor codepage support. J.F.
-rw-r--r--source/lib/util.c12
-rw-r--r--source/lib/util_unistr.c97
-rw-r--r--source/param/loadparm.c9
-rw-r--r--source/smbd/nttrans.c1
-rw-r--r--source/smbd/server.c7
5 files changed, 124 insertions, 2 deletions
diff --git a/source/lib/util.c b/source/lib/util.c
index 71f440eae52..a824887e88b 100644
--- a/source/lib/util.c
+++ b/source/lib/util.c
@@ -1662,6 +1662,18 @@ void *Realloc(void *p,size_t size)
/****************************************************************************
+free memory, checks for NULL
+****************************************************************************/
+void safe_free(void *p)
+{
+ if (p != NULL)
+ {
+ free(p);
+ }
+}
+
+
+/****************************************************************************
get my own name and IP
****************************************************************************/
BOOL get_myname(char *my_name)
diff --git a/source/lib/util_unistr.c b/source/lib/util_unistr.c
index a512f68acc0..2c721aeb473 100644
--- a/source/lib/util_unistr.c
+++ b/source/lib/util_unistr.c
@@ -79,6 +79,61 @@ int dos_PutUniCode(char *dst,const char *src, ssize_t len)
}
/*******************************************************************
+ Put an ASCII string into a UNICODE array (uint16's).
+
+ Warning: doesn't do any codepage !!! BAD !!!
+
+ Help ! Fix Me ! Fix Me !
+********************************************************************/
+
+void ascii_to_unistr(uint16 *dest, const char *src, int maxlen)
+{
+ uint16 *destend = dest + maxlen;
+ register char c;
+
+ while (dest < destend)
+ {
+ c = *(src++);
+ if (c == 0)
+ {
+ break;
+ }
+
+ *(dest++) = (uint16)c;
+ }
+
+ *dest = 0;
+}
+
+/*******************************************************************
+ Pull an ASCII string out of a UNICODE array (uint16's).
+
+ Warning: doesn't do any codepage !!! BAD !!!
+
+ Help ! Fix Me ! Fix Me !
+********************************************************************/
+
+void unistr_to_ascii(char *dest, const uint16 *src, int len)
+{
+ char *destend = dest + len;
+ register uint16 c;
+
+ while (dest < destend)
+ {
+ c = *(src++);
+ if (c == 0)
+ {
+ break;
+ }
+
+ *(dest++) = (char)c;
+ }
+
+ *dest = 0;
+}
+
+
+/*******************************************************************
Skip past some unicode strings in a buffer.
********************************************************************/
@@ -183,6 +238,48 @@ char *dos_unistr2_to_str(UNISTR2 *str)
}
/*******************************************************************
+ Convert a UNISTR2 structure to an ASCII string
+ Warning: this version does DOS codepage.
+********************************************************************/
+
+void unistr2_to_ascii(char *dest, const UNISTR2 *str, size_t maxlen)
+{
+ char *destend;
+ const uint16 *src;
+ size_t len;
+ register uint16 c;
+
+ src = str->buffer;
+ len = MIN(str->uni_str_len, maxlen);
+ destend = dest + len;
+
+ while (dest < destend)
+ {
+ uint16 ucs2_val;
+ uint16 cp_val;
+
+ c = *(src++);
+ if (c == 0)
+ {
+ break;
+ }
+
+ ucs2_val = SVAL(src,0);
+ cp_val = ucs2_to_doscp[ucs2_val];
+
+ if (cp_val < 256)
+ *(dest++) = (char)cp_val;
+ else {
+ *dest= (cp_val >> 8) & 0xff;
+ *(dest++) = (cp_val & 0xff);
+ }
+ }
+
+ *dest = 0;
+}
+
+
+/*******************************************************************
Return a number stored in a buffer
********************************************************************/
diff --git a/source/param/loadparm.c b/source/param/loadparm.c
index 839c9c9e162..85082467412 100644
--- a/source/param/loadparm.c
+++ b/source/param/loadparm.c
@@ -159,6 +159,8 @@ typedef struct
char *szAddUserScript;
char *szDelUserScript;
char *szWINSHook;
+ char *szNtForms;
+ char *szNtDriverFile;
#ifdef WITH_UTMP
char *szUtmpDir;
#endif /* WITH_UTMP */
@@ -721,6 +723,8 @@ static struct parm_struct parm_table[] =
{"printer", P_STRING, P_LOCAL, &sDefault.szPrintername, NULL, NULL, 0},
{"printer driver", P_STRING, P_LOCAL, &sDefault.szPrinterDriver, NULL, NULL, FLAG_PRINT},
{"printer driver location", P_STRING, P_LOCAL, &sDefault.szPrinterDriverLocation, NULL, NULL, FLAG_PRINT|FLAG_GLOBAL},
+ {"nt forms file", P_STRING, P_GLOBAL, &Globals.szNtForms, NULL, NULL, FLAG_GLOBAL},
+ {"nt printer driver",P_STRING, P_GLOBAL, &Globals.szNtDriverFile, NULL, NULL, FLAG_GLOBAL},
{"Filename Handling", P_SEP, P_SEPARATOR},
@@ -908,6 +912,8 @@ static void init_globals(void)
string_set(&Globals.szPasswdProgram, PASSWD_PROGRAM);
string_set(&Globals.szPrintcapname, PRINTCAP_NAME);
string_set(&Globals.szDriverFile, DRIVERFILE);
+ string_set(&Globals.szNtForms, FORMSFILE);
+ string_set(&Globals.szNtDriverFile, NTDRIVERSDIR);
string_set(&Globals.szLockDir, LOCKDIR);
string_set(&Globals.szRootdir, "/");
#ifdef WITH_UTMP
@@ -1222,6 +1228,9 @@ FN_GLOBAL_STRING(lp_domain_guest_group,&Globals.szDomainGuestGroup)
FN_GLOBAL_STRING(lp_domain_admin_users,&Globals.szDomainAdminUsers)
FN_GLOBAL_STRING(lp_domain_guest_users,&Globals.szDomainGuestUsers)
+FN_GLOBAL_STRING(lp_nt_forms,&Globals.szNtForms)
+FN_GLOBAL_STRING(lp_nt_drivers_file,&Globals.szNtDriverFile)
+
#ifdef WITH_LDAP
FN_GLOBAL_STRING(lp_ldap_server,&Globals.szLdapServer);
FN_GLOBAL_STRING(lp_ldap_suffix,&Globals.szLdapSuffix);
diff --git a/source/smbd/nttrans.c b/source/smbd/nttrans.c
index 4b344c33185..d9ad16e7d3c 100644
--- a/source/smbd/nttrans.c
+++ b/source/smbd/nttrans.c
@@ -44,6 +44,7 @@ static char *known_nt_pipes[] = {
"\\lsass",
"\\lsarpc",
"\\winreg",
+ "\\spoolss",
NULL
};
diff --git a/source/smbd/server.c b/source/smbd/server.c
index 44e347b1046..d1788678a7c 100644
--- a/source/smbd/server.c
+++ b/source/smbd/server.c
@@ -468,6 +468,9 @@ static void init_structs(void )
/* for LSA handles */
init_lsa_policy_hnd();
+ /* for SPOOLSS handles */
+ init_printer_hnd();
+
init_dptrs();
}
@@ -707,8 +710,8 @@ static void usage(char *pname)
DEBUG( 3, ( "Becoming a daemon.\n" ) );
become_daemon();
}
-
- check_kernel_oplocks();
+
+ check_kernel_oplocks();
if (!directory_exist(lp_lockdir(), NULL)) {
mkdir(lp_lockdir(), 0755);