Bejamin Kuit. #define MYSQL and MYSQL_ROW to void iff <mysql.h> not found.
[samba.git] / source3 / include / includes.h
1 #ifndef _INCLUDES_H
2 #define _INCLUDES_H
3 /* 
4    Unix SMB/Netbios implementation.
5    Version 1.9.
6    Machine customisation and include handling
7    Copyright (C) Andrew Tridgell 1994-1998
8    
9    This program is free software; you can redistribute it and/or modify
10    it under the terms of the GNU General Public License as published by
11    the Free Software Foundation; either version 2 of the License, or
12    (at your option) any later version.
13    
14    This program is distributed in the hope that it will be useful,
15    but WITHOUT ANY WARRANTY; without even the implied warranty of
16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17    GNU General Public License for more details.
18    
19    You should have received a copy of the GNU General Public License
20    along with this program; if not, write to the Free Software
21    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22 */
23
24 #ifndef NO_CONFIG_H /* for some tests */
25 #include "config.h"
26 #endif
27
28 #include "local.h"
29
30 #ifdef AIX
31 #define DEFAULT_PRINTING PRINT_AIX
32 #define PRINTCAP_NAME "/etc/qconfig"
33 #endif
34
35 #ifdef HPUX
36 #define DEFAULT_PRINTING PRINT_HPUX
37 #endif
38
39 #ifdef QNX
40 #define DEFAULT_PRINTING PRINT_QNX
41 #endif
42
43 #ifdef SUNOS4
44 /* on SUNOS4 termios.h conflicts with sys/ioctl.h */
45 #undef HAVE_TERMIOS_H
46 #endif
47
48
49 /* if we have both SYSV IPC and shared mmap then we need to choose. For most
50    systems it is much faster to use SYSV IPC, but under Linux it is
51    about 5 times faster to use fcntl, so for Linux systems we force
52    fcntl based locking */
53 #if (defined(HAVE_SYSV_IPC) && defined(HAVE_SHARED_MMAP))
54 # ifdef LINUX
55 #  undef HAVE_SYSV_IPC
56 # else
57 #  undef HAVE_SHARED_MMAP
58 # endif
59 #endif
60
61
62 #include <sys/types.h>
63
64 #ifdef TIME_WITH_SYS_TIME
65 #include <sys/time.h>
66 #include <time.h>
67 #else
68 #ifdef HAVE_SYS_TIME_H
69 #include <sys/time.h>
70 #else
71 #include <time.h>
72 #endif
73 #endif
74
75 #ifdef HAVE_SYS_RESOURCE_H
76 #include <sys/resource.h>
77 #endif
78
79 #ifdef HAVE_UNISTD_H
80 #include <unistd.h>
81 #endif
82
83 #include <stdio.h>
84 #include <stddef.h>
85
86 #include <netinet/in.h>
87 #if defined(HAVE_RPC_RPC_H)
88 #include <rpc/rpc.h>
89 #endif
90
91 #ifdef HAVE_SYS_PARAM_H
92 #include <sys/param.h>
93 #endif
94
95 #ifdef HAVE_STDLIB_H
96 #include <stdlib.h>
97 #endif
98
99 #ifdef HAVE_SYS_SOCKET_H
100 #include <sys/socket.h>
101 #endif
102
103 #ifdef HAVE_SYS_SYSCALL_H
104 #include <sys/syscall.h>
105 #elif HAVE_SYSCALL_H
106 #include <syscall.h>
107 #endif
108
109 #ifdef HAVE_STRING_H
110 #include <string.h>
111 #endif
112
113 #ifdef HAVE_STRINGS_H
114 #include <strings.h>
115 #endif
116
117 #ifdef HAVE_MEMORY_H
118 #include <memory.h>
119 #endif
120
121 #ifdef MEM_MAN
122 #include "../mem_man/mem_man.h"
123 #else
124 #ifdef HAVE_MALLOC_H
125 #include <malloc.h>
126 #endif
127 #endif
128
129 #ifdef HAVE_FCNTL_H
130 #include <fcntl.h>
131 #else
132 #ifdef HAVE_SYS_FCNTL_H
133 #include <sys/fcntl.h>
134 #endif
135 #endif
136
137 #include <sys/stat.h>
138
139 #ifdef HAVE_LIMITS_H
140 #include <limits.h>
141 #endif
142
143 #ifdef HAVE_SYS_IOCTL_H
144 #include <sys/ioctl.h>
145 #endif
146
147 #ifdef HAVE_SYS_FILIO_H
148 #include <sys/filio.h>
149 #endif
150
151 #include <signal.h>
152
153 #ifdef HAVE_SYS_WAIT_H
154 #include <sys/wait.h>
155 #endif
156 #ifdef HAVE_CTYPE_H
157 #include <ctype.h>
158 #endif
159 #ifdef HAVE_GRP_H
160 #include <grp.h>
161 #endif
162 #ifdef HAVE_SYS_ID_H
163 #include <sys/id.h>
164 #endif
165
166 #include <errno.h>
167
168 #ifdef HAVE_UTIME_H
169 #include <utime.h>
170 #endif
171
172 #ifdef HAVE_SYS_SELECT_H
173 #include <sys/select.h>
174 #endif
175
176 #ifdef HAVE_SYS_MODE_H
177 /* apparently AIX needs this for S_ISLNK */
178 #ifndef S_ISLNK
179 #include <sys/mode.h>
180 #endif
181 #endif
182
183 #ifdef HAVE_GLOB_H
184 #include <glob.h>
185 #endif
186
187 #include <pwd.h>
188 #include <grp.h>
189
190 #ifdef HAVE_STDARG_H
191 #include <stdarg.h>
192 #else
193 #include <varargs.h>
194 #endif
195
196 #include <arpa/inet.h>
197 #include <netdb.h>
198 #include <syslog.h>
199 #include <sys/file.h>
200
201 #ifdef HAVE_NETINET_TCP_H
202 #include <netinet/tcp.h>
203 #endif
204
205 #ifdef HAVE_TERMIOS_H
206 #include <termios.h>
207 #endif
208
209 #if HAVE_DIRENT_H
210 # include <dirent.h>
211 # define NAMLEN(dirent) strlen((dirent)->d_name)
212 #else
213 # define dirent direct
214 # define NAMLEN(dirent) (dirent)->d_namlen
215 # if HAVE_SYS_NDIR_H
216 #  include <sys/ndir.h>
217 # endif
218 # if HAVE_SYS_DIR_H
219 #  include <sys/dir.h>
220 # endif
221 # if HAVE_NDIR_H
222 #  include <ndir.h>
223 # endif
224 #endif
225
226 #ifdef HAVE_SYS_MMAN_H
227 #include <sys/mman.h>
228 #endif
229
230 #ifdef HAVE_SYSV_IPC
231 #include <sys/ipc.h>
232 #include <sys/shm.h>
233 #include <sys/sem.h>
234 #endif
235
236 #if 0
237 /*
238  *  I have removed this as it prevents compilation under SCO Server
239  *  3.2. If you need to add it back in then please add a comment as to
240  *  why it's needed and what OS it's needed for so we can work out how
241  *  to test for it properly (tridge) */
242 #ifdef HAVE_NET_ROUTE_H
243 #include <net/route.h>
244 #endif
245 #endif
246
247 #ifdef HAVE_NET_IF_H
248 #include <net/if.h>
249 #endif
250
251
252 #ifdef HAVE_SYS_MOUNT_H
253 #include <sys/mount.h>
254 #endif
255
256 #ifdef HAVE_SYS_VFS_H
257 #include <sys/vfs.h>
258 #endif
259
260 #ifdef HAVE_SYS_ACL_H
261 #include <sys/acl.h>
262 #endif
263
264 #ifdef HAVE_SYS_FS_S5PARAM_H 
265 #include <sys/fs/s5param.h>
266 #endif
267
268 #if defined (HAVE_SYS_FILSYS_H) && !defined (_CRAY)
269 #include <sys/filsys.h> 
270 #endif
271
272 #ifdef HAVE_SYS_STATFS_H
273 # include <sys/statfs.h>
274 #endif
275
276 #ifdef HAVE_DUSTAT_H              
277 #include <sys/dustat.h>
278 #endif
279
280 #ifdef HAVE_SYS_STATVFS_H          
281 #include <sys/statvfs.h>
282 #endif
283
284 #ifdef HAVE_SHADOW_H
285 #include <shadow.h>
286 #endif
287
288 #ifdef HAVE_GETPWANAM
289 #include <sys/label.h>
290 #include <sys/audit.h>
291 #include <pwdadj.h>
292 #endif
293
294 #ifdef HAVE_SYS_SECURITY_H
295 #include <sys/security.h>
296 #include <prot.h>
297 #define PASSWORD_LENGTH 16
298 #endif  /* HAVE_SYS_SECURITY_H */
299
300 #ifdef HAVE_COMPAT_H
301 #include <compat.h>
302 #endif
303
304 #ifdef HAVE_STROPTS_H
305 #include <stropts.h>
306 #endif
307
308 #ifdef HAVE_POLL_H
309 #include <poll.h>
310 #endif
311
312 #ifdef HAVE_SYS_CAPABILITY_H
313 #include <sys/capability.h>
314 #endif
315
316 #if defined(HAVE_RPC_RPC_H)
317 #include <rpc/rpc.h>
318 #endif
319
320 #if defined(HAVE_YP_GET_DEFAULT_DOMAIN) && defined(HAVE_SETNETGRENT) && defined(HAVE_ENDNETGRENT) && defined(HAVE_GETNETGRENT)
321 #define HAVE_NETGROUP 1
322 #endif
323
324 #if defined (HAVE_NETGROUP)
325 #if defined(HAVE_RPCSVC_YP_PROT_H)
326 #include <rpcsvc/yp_prot.h>
327 #endif
328 #if defined(HAVE_RPCSVC_YPCLNT_H)
329 #include <rpcsvc/ypclnt.h>
330 #endif
331 #endif /* HAVE_NETGROUP */
332
333 #if defined(HAVE_MYSQL_H)
334 #include <mysql.h>
335 #else
336 /* needed to get make proto to work with no <mysql.h> */
337 #define MYSQL     void
338 #define MYSQL_ROW void
339 #endif
340
341 #ifndef uchar
342 #define uchar unsigned char
343 #endif
344
345 #ifdef HAVE_UNSIGNED_CHAR
346 #define schar signed char
347 #else
348 #define schar char
349 #endif
350
351 /*
352    Samba needs type definitions for int16, int32, uint16 and uint32.
353
354    Normally these are signed and unsigned 16 and 32 bit integers, but
355    they actually only need to be at least 16 and 32 bits
356    respectively. Thus if your word size is 8 bytes just defining them
357    as signed and unsigned int will work.
358 */
359
360 #ifndef uint8
361 #define uint8 unsigned char
362 #endif
363
364 #if !defined(int16) && !defined(HAVE_INT16_FROM_RPC_RPC_H)
365 #if (SIZEOF_SHORT == 4)
366 #define int16 __ERROR___CANNOT_DETERMINE_TYPE_FOR_INT16;
367 #else /* SIZEOF_SHORT != 4 */
368 #define int16 short
369 #endif /* SIZEOF_SHORT != 4 */
370 #endif
371
372 /*
373  * Note we duplicate the size tests in the unsigned 
374  * case as int16 may be a typedef from rpc/rpc.h
375  */
376
377 #if !defined(uint16) && !defined(HAVE_UINT16_FROM_RPC_RPC_H)
378 #if (SIZEOF_SHORT == 4)
379 #define uint16 __ERROR___CANNOT_DETERMINE_TYPE_FOR_INT16;
380 #else /* SIZEOF_SHORT != 4 */
381 #define uint16 unsigned short
382 #endif /* SIZEOF_SHORT != 4 */
383 #endif
384
385 #if !defined(int32) && !defined(HAVE_INT32_FROM_RPC_RPC_H)
386 #if (SIZEOF_INT == 4)
387 #define int32 int
388 #elif (SIZEOF_LONG == 4)
389 #define int32 long
390 #elif (SIZEOF_SHORT == 4)
391 #define int32 short
392 #endif
393 #endif
394
395 /*
396  * Note we duplicate the size tests in the unsigned 
397  * case as int32 may be a typedef from rpc/rpc.h
398  */
399
400 #if !defined(uint32) && !defined(HAVE_UINT32_FROM_RPC_RPC_H)
401 #if (SIZEOF_INT == 4)
402 #define uint32 unsigned int
403 #elif (SIZEOF_LONG == 4)
404 #define uint32 unsigned long
405 #elif (SIZEOF_SHORT == 4)
406 #define uint32 unsigned short
407 #endif
408 #endif
409
410 /*
411  * Types for devices, inodes and offsets.
412  */
413
414 #ifndef SMB_DEV_T
415 #define SMB_DEV_T dev_t
416 #endif
417
418 /*
419  * Setup the correctly sized inode type.
420  */
421
422 #ifndef SMB_INO_T
423 #  ifdef HAVE_INO64_T
424 #    define SMB_INO_T ino64_t
425 #  else
426 #    define SMB_INO_T ino_t
427 #  endif
428 #endif
429
430 #ifndef LARGE_SMB_INO_T
431 #  if defined(HAVE_INO64_T) || (defined(SIZEOF_INO_T) && (SIZEOF_INO_T == 8))
432 #    define LARGE_SMB_INO_T 1
433 #  endif
434 #endif
435
436 #ifdef LARGE_SMB_INO_T
437 #define SINO_T(p, ofs, v) (SIVAL(p,ofs,(v)&0xFFFFFFFF), SIVAL(p,(ofs)+4,(v)>>32))
438 #else 
439 #define SINO_T(p, ofs, v) (SIVAL(p,ofs,v),SIVAL(p,(ofs)+4,0))
440 #endif
441
442 #ifndef SMB_OFF_T
443 #  ifdef HAVE_OFF64_T
444 #    define SMB_OFF_T off64_t
445 #  else
446 #    define SMB_OFF_T off_t
447 #  endif
448 #endif
449
450 #define SMB_OFF_T_BITS (sizeof(SMB_OFF_T)*8)
451
452 /*
453  * Set the define that tells us if we can do 64 bit
454  * NT SMB calls.
455  */
456
457 #ifndef LARGE_SMB_OFF_T
458 #  if defined(HAVE_OFF64_T) || (defined(SIZEOF_OFF_T) && (SIZEOF_OFF_T == 8))
459 #    define LARGE_SMB_OFF_T 1
460 #  endif
461 #endif
462
463 #ifdef LARGE_SMB_OFF_T
464 #define SOFF_T(p, ofs, v) (SIVAL(p,ofs,(v)&0xFFFFFFFF), SIVAL(p,(ofs)+4,(v)>>32))
465 #else 
466 #define SOFF_T(p, ofs, v) (SIVAL(p,ofs,v),SIVAL(p,(ofs)+4,0))
467 #endif
468
469 /*
470  * Type for stat structure.
471  */
472
473 #ifndef SMB_STRUCT_STAT
474 #  if defined(HAVE_STAT64) && defined(HAVE_OFF64_T)
475 #    define SMB_STRUCT_STAT struct stat64
476 #  else
477 #    define SMB_STRUCT_STAT struct stat
478 #  endif
479 #endif
480
481 /*
482  * Defines for 64 bit fcntl locks.
483  */
484
485 #ifndef SMB_STRUCT_FLOCK
486 #  if defined(HAVE_STRUCT_FLOCK64) && defined(HAVE_OFF64_T)
487 #    define SMB_STRUCT_FLOCK struct flock64
488 #  else
489 #    define SMB_STRUCT_FLOCK struct flock
490 #  endif
491 #endif
492
493 #ifndef SMB_F_SETLKW
494 #  if defined(HAVE_STRUCT_FLOCK64) && defined(HAVE_OFF64_T)
495 #    define SMB_F_SETLKW F_SETLKW64
496 #  else
497 #    define SMB_F_SETLKW F_SETLKW
498 #  endif
499 #endif
500
501 #ifndef SMB_F_SETLK
502 #  if defined(HAVE_STRUCT_FLOCK64) && defined(HAVE_OFF64_T)
503 #    define SMB_F_SETLK F_SETLK64
504 #  else
505 #    define SMB_F_SETLK F_SETLK
506 #  endif
507 #endif
508
509 #ifndef SMB_F_GETLK
510 #  if defined(HAVE_STRUCT_FLOCK64) && defined(HAVE_OFF64_T)
511 #    define SMB_F_GETLK F_GETLK64
512 #  else
513 #    define SMB_F_GETLK F_GETLK
514 #  endif
515 #endif
516
517 #if defined(HAVE_LONGLONG)
518 #define SMB_BIG_UINT unsigned long long
519 #define SMB_BIG_INT long long
520 #else
521 #define SMB_BIG_UINT unsigned long
522 #define SMB_BIG_INT long
523 #endif
524
525 #ifndef MIN
526 #define MIN(a,b) ((a)<(b)?(a):(b))
527 #endif
528
529 #ifndef MAX
530 #define MAX(a,b) ((a)>(b)?(a):(b))
531 #endif
532
533 #ifndef HAVE_STRERROR
534 extern char *sys_errlist[];
535 #define strerror(i) sys_errlist[i]
536 #endif
537
538 #ifndef HAVE_STRCHR
539 # define strchr                 index
540 # define strrchr                rindex
541 #endif
542
543 #ifndef HAVE_ERRNO_DECL
544 extern int errno;
545 #endif
546
547 #ifdef HAVE_BROKEN_GETGROUPS
548 #define GID_T int
549 #else
550 #define GID_T gid_t
551 #endif
552
553
554 /* Lists, trees, caching, datbase... */
555 #include "ubi_sLinkList.h"
556 #include "ubi_dLinkList.h"
557 #include "dlinklist.h"
558
559 #ifndef UBI_BINTREE_H
560 #include "ubi_Cache.h"
561 #endif /* UBI_BINTREE_H */
562
563 #include "version.h"
564 #include "smb.h"
565 #include "smbw.h"
566 #include "nameserv.h"
567
568 #include "byteorder.h"
569
570 #include "kanji.h"
571 #include "charset.h"
572
573 #include "nterr.h"
574
575 #ifndef MAXCODEPAGELINES
576 #define MAXCODEPAGELINES 256
577 #endif
578
579 /***** automatically generated prototypes *****/
580 #include "proto.h"
581
582 #ifdef strcpy
583 #undef strcpy
584 #endif /* strcpy */
585 #define strcpy(dest,src) __ERROR__XX__NEVER_USE_STRCPY___;
586
587 #ifdef strcat
588 #undef strcat
589 #endif /* strcat */
590 #define strcat(dest,src) __ERROR__XX__NEVER_USE_STRCAT___;
591
592 #ifdef sprintf
593 #undef sprintf
594 #endif /* sprintf */
595 #define sprintf __ERROR__XX__NEVER_USE_SPRINTF__;
596
597 #define pstrcpy(d,s) safe_strcpy((d),(s),sizeof(pstring)-1)
598 #define pstrcat(d,s) safe_strcat((d),(s),sizeof(pstring)-1)
599 #define fstrcpy(d,s) safe_strcpy((d),(s),sizeof(fstring)-1)
600 #define fstrcat(d,s) safe_strcat((d),(s),sizeof(fstring)-1)
601
602 #ifdef __COMPAR_FN_T
603 #define QSORT_CAST (__compar_fn_t)
604 #endif
605
606 #ifndef QSORT_CAST
607 #define QSORT_CAST (int (*)(const void *, const void *))
608 #endif
609
610 /* this guess needs to be improved (tridge) */
611 #if defined(STAT_STATVFS) && !defined(SYSV)
612 #define SYSV 1
613 #endif
614
615 #ifndef DEFAULT_PRINTING
616 #ifdef SYSV
617 #define DEFAULT_PRINTING PRINT_SYSV
618 #define PRINTCAP_NAME "lpstat"
619 #else
620 #define DEFAULT_PRINTING PRINT_BSD
621 #define PRINTCAP_NAME "/etc/printcap"
622 #endif
623 #endif
624
625 #ifndef PRINTCAP_NAME
626 #define PRINTCAP_NAME "/etc/printcap"
627 #endif
628
629 #ifndef SIGCLD
630 #define SIGCLD SIGCHLD
631 #endif
632
633 #if (defined(HAVE_SYSV_IPC) || defined(HAVE_SHARED_MMAP))
634 #define FAST_SHARE_MODES 1
635 #endif
636
637 #ifndef MAP_FILE
638 #define MAP_FILE 0
639 #endif
640
641 #ifdef HAVE_SYSV_IPC
642 #ifndef HAVE_UNION_SEMUN
643 union semun {
644         int val;
645         struct semid_ds *buf;
646         unsigned short *array;
647 };
648 #endif
649 #endif
650
651 #if (!defined(WITH_NISPLUS) && !defined(WITH_LDAP))
652 #define USE_SMBPASS_DB 1
653 #define USE_SMBUNIX_DB 1
654 #endif
655
656 #if defined(HAVE_PUTPRPWNAM) && defined(AUTH_CLEARTEXT_SEG_CHARS)
657 #define OSF1_ENH_SEC 1
658 #endif
659
660 #if defined(HAVE_PAM_AUTHENTICATE) && defined(HAVE_SECURITY_PAM_APPL_H)
661 #define HAVE_PAM 1
662 #endif
663
664 #ifndef ALLOW_CHANGE_PASSWORD
665 #if (defined(HAVE_TERMIOS_H) && defined(HAVE_DUP2) && defined(HAVE_SETSID))
666 #define ALLOW_CHANGE_PASSWORD 1
667 #endif
668 #endif
669
670 /* what is the longest significant password available on your system? 
671  Knowing this speeds up password searches a lot */
672 #ifndef PASSWORD_LENGTH
673 #define PASSWORD_LENGTH 8
674 #endif
675
676 #ifdef REPLACE_INET_NTOA
677 #define inet_ntoa rep_inet_ntoa
678 #endif
679
680 #ifndef HAVE_PIPE
681 #define SYNC_DNS 1
682 #endif
683
684 #ifndef MAXPATHLEN
685 #define MAXPATHLEN 256
686 #endif
687
688 #ifndef SEEK_SET
689 #define SEEK_SET 0
690 #endif
691
692 #ifndef INADDR_LOOPBACK
693 #define INADDR_LOOPBACK 0x7f000001
694 #endif
695
696 #ifndef INADDR_NONE
697 #define INADDR_NONE 0xffffffff
698 #endif
699
700 #ifndef HAVE_CRYPT
701 #define crypt ufc_crypt
702 #endif
703
704 #ifndef O_ACCMODE
705 #define O_ACCMODE (O_RDONLY | O_WRONLY | O_RDWR)
706 #endif
707
708 #if defined(HAVE_CRYPT16) && defined(HAVE_GETAUTHUID)
709 #define ULTRIX_AUTH 1
710 #endif
711
712 #ifdef HAVE_LIBREADLINE
713 #  ifdef HAVE_READLINE_READLINE_H
714 #    include <readline/readline.h>
715 #    ifdef HAVE_READLINE_HISTORY_H
716 #      include <readline/history.h>
717 #    endif
718 #  else
719 #    ifdef HAVE_READLINE_H
720 #      include <readline.h>
721 #      ifdef HAVE_HISTORY_H
722 #        include <history.h>
723 #      endif
724 #    else
725 #      undef HAVE_LIBREADLINE
726 #    endif
727 #  endif
728 #endif
729
730 #ifndef HAVE_STRDUP
731 char *strdup(const char *s);
732 #endif
733
734 #ifndef HAVE_MEMMOVE
735 void *memmove(void *dest,const void *src,int size);
736 #endif
737
738 #ifndef HAVE_INITGROUPS
739 int initgroups(char *name,gid_t id);
740 #endif
741
742 #ifndef HAVE_RENAME
743 int rename(const char *zfrom, const char *zto);
744 #endif
745
746 #ifndef HAVE_MKTIME
747 time_t mktime(struct tm *t);
748 #endif
749
750 #ifndef HAVE_FTRUNCATE
751 int ftruncate(int f,long l);
752 #endif
753
754 #if (defined(HAVE_SETRESUID) && !defined(HAVE_SETRESUID_DECL))
755 /* stupid glibc */
756 int setresuid(uid_t ruid, uid_t euid, uid_t suid);
757 int setresgid(gid_t rgid, gid_t egid, gid_t sgid);
758 #endif
759
760 #if (defined(HAVE_CRYPT) && !defined(HAVE_CRYPT_DECL) && !defined(KRB4_AUTH))
761 /* stupid glibc */
762 int crypt(const char *key, const char *salt);
763 #endif
764
765 #if !defined(HAVE_BZERO) && defined(HAVE_MEMSET)
766 #define bzero(a,b) memset((a),'\0',(b))
767 #endif
768
769 #ifdef REPLACE_GETPASS
770 #define getpass(prompt) getsmbpass((prompt))
771 #endif
772
773 /* yuck, I'd like a better way of doing this */
774 #define DIRP_SIZE (256 + 32)
775
776 #endif /* _INCLUDES_H */