xref: /titanic_52/usr/src/cmd/svr4pkg/hdrs/libinst.h (revision a7df97bafe5a886e6ddb3fe8170b2d547cd3b029)
1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License (the "License").
6  * You may not use this file except in compliance with the License.
7  *
8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9  * or http://www.opensolaris.org/os/licensing.
10  * See the License for the specific language governing permissions
11  * and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL HEADER in each
14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15  * If applicable, add the following below this CDDL HEADER, with the
16  * fields enclosed by brackets "[]" replaced with your own identifying
17  * information: Portions Copyright [yyyy] [name of copyright owner]
18  *
19  * CDDL HEADER END
20  */
21 
22 /*
23  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
24  * Use is subject to license terms.
25  */
26 
27 #ifndef	__HDRS_LIBINST_H__
28 #define	__HDRS_LIBINST_H__
29 
30 
31 #ifdef __cplusplus
32 extern "C" {
33 #endif
34 
35 #include <stdio.h>
36 #include <fcntl.h>
37 #include <sys/types.h>
38 #include <sys/stat.h>
39 #include <pkgstrct.h>
40 #include <pkginfo.h>
41 #include "pkglib.h"
42 #include <cfext.h>
43 #include "install.h"
44 
45 #define	DEF_NONE_SCR	"i.CompCpio"
46 
47 #define	BL_ALL		-1	/* refers to all allocated lists */
48 
49 /* signal handler function definition */
50 
51 typedef void (sighdlrFunc_t)(int);
52 
53 /* maximum parameter length */
54 
55 #define	MAX_PKG_PARAM_LENGTH	(64+1)	/* +1 for null termination */
56 
57 /* flag for check_applicability */
58 
59 typedef unsigned long CAF_T;
60 
61 /* flags for check_applicability */
62 
63 #define	CAF_IN_GLOBAL_ZONE	0x00000001	/* in global zone */
64 #define	CAF_SCOPE_GLOBAL	0x00000002	/* -G specified */
65 #define	CAF_SCOPE_NONGLOBAL	0x00000004	/* -Z specified */
66 
67 /* path to the request file in the package directory */
68 
69 #define	REQUEST_FILE	"install/request"
70 
71 /* path to the copyright file in the package directory */
72 
73 #define	COPYRIGHT_FILE	"install/copyright"
74 
75 /* path to the depend file in the package directory */
76 
77 #define	DEPEND_FILE	"install/depend"
78 
79 /*
80  * name of environment variable set to non-global zone name being installed:
81  * pkgadd/pkginstall expects this name and passes it on to any scripts that
82  * are run if it is set.
83  */
84 
85 #define	PKG_ZONENAME_VARIABLE	"SUNW_PKG_INSTALL_ZONENAME"
86 
87 /*
88  * name of environment variable set to indicate this package should be installed
89  * in the current zone only - see PSARC/2004/789 - New Pkginfo(4) attributes
90  * for zones
91  */
92 
93 #define	PKG_THISZONE_VARIABLE	"SUNW_PKG_THISZONE"
94 
95 /*
96  * name of environment variable set to indicate this package should be installed
97  * in all zones, and only from the global zone - see PSARC/2003/460
98  */
99 
100 #define	PKG_ALLZONES_VARIABLE	"SUNW_PKG_ALLZONES"
101 
102 /*
103  * name of environment variable set to indicate this package should be installed
104  * hollow (db update only) when installed in nonglobal zone - see PSARC/2003/460
105  */
106 
107 #define	PKG_HOLLOW_VARIABLE	"SUNW_PKG_HOLLOW"
108 
109 /*
110  * General purpose return codes used for functions which don't return a basic
111  * success or failure. For those functions wherein a yes/no result is
112  * possible, then 1 means OK and 0 means FAIL.
113  */
114 #define	RESULT_OK	0x0
115 #define	RESULT_WRN	0x1
116 #define	RESULT_ERR	0x2
117 
118 /* These are the file status indicators for the contents file */
119 #define	INST_RDY	'+'	/* entry is ready to installf -f */
120 #define	RM_RDY		'-'	/* entry is ready for removef -f */
121 #define	NOT_FND		'!'	/* entry (or part of entry) was not found */
122 #define	SERVED_FILE	'%'	/* using the file server's RO partition */
123 #define	STAT_NEXT	'@'	/* this is awaiting eptstat */
124 #define	DUP_ENTRY	'#'	/* there's a duplicate of this */
125 #define	CONFIRM_CONT	'*'	/* need to confirm contents */
126 #define	CONFIRM_ATTR	'~'	/* need to confirm attributes */
127 #define	ENTRY_OK	'\0'	/* entry is a confirmed file */
128 
129 /* control bits for pkgdbmerg() */
130 #define	NO_COPY		0x0001
131 #define	CLIENT_PATHS	0x0002	/* working with a client database */
132 
133 /* control bits for file verification by class */
134 #define	DEFAULT		0x0	/* standard full verification */
135 #define	NOVERIFY	0x1	/* do not verify */
136 #define	QKVERIFY	0x2	/* do a quick verification instead */
137 
138 /* control bit for path type to pass to CAS */
139 #define	DEFAULT		0x0	/* standard server-relative absolute path */
140 #define	REL_2_CAS	0x1	/* pass pkgmap-type relative path */
141 
142 /* findscripts() argument */
143 #define	I_ONLY		0x0	/* find install class action scripts */
144 #define	R_ONLY		0x1	/* find removal class action scripts */
145 
146 struct cl_attr {
147 	char	name[CLSSIZ+1];	/* name of class */
148 	char	*inst_script;	/* install class action script */
149 	char	*rem_script;	/* remove class action script */
150 	unsigned	src_verify:3;	/* source verification level */
151 	unsigned 	dst_verify:4;	/* destination verification level */
152 	unsigned	relpath_2_CAS:1;	/* CAS gets relative paths */
153 };
154 
155 #if defined(__STDC__)
156 #define	__P(protos) protos
157 #else	/* __STDC__ */
158 #define	__P(protos) ()
159 #endif	/* __STDC__ */
160 
161 /* Common quit declaration used across many package commands */
162 extern void	quit(int) __NORETURN;
163 
164 
165 /* listmgr.c */
166 extern int	bl_create __P((int count_per_block, int struct_size,
167 		    char *desc));
168 extern char	*bl_next_avail __P((int list_handle));
169 extern char	*bl_get_record __P((int list_handle, int recno));
170 extern void	bl_free __P((int list_handle));
171 extern int	ar_create __P((int count_per_block, int struct_size,
172 		    char *desc));
173 extern char	**ar_next_avail __P((int list_handle));
174 extern char	**ar_get_head __P((int list_handle));
175 extern int	ar_delete __P((int list_handle, int index));
176 extern void	ar_free __P((int list_handle));
177 
178 /* doulimit.c */
179 extern int	set_ulimit __P((char *script, char *err_msg));
180 extern int	clr_ulimit __P((void));
181 extern int	assign_ulimit __P((char *fslimit));
182 
183 /* dryrun.c */
184 extern void	set_continue_not_ok __P((void));
185 extern int	continue_is_ok __P((void));
186 extern int	in_dryrun_mode __P((void));
187 extern int	in_continue_mode __P((void));
188 extern void	init_dryrunfile __P((char *dr_dir));
189 extern void	init_contfile __P((char *cn_dir));
190 extern void	set_dr_exitmsg __P((char *value));
191 extern void	set_dr_info __P((int type, int value));
192 extern void	write_dryrun_file __P((struct cfextra **extlist));
193 
194 /* instvol.c */
195 extern void	regfiles_free __P((void));
196 
197 /* lockinst.c */
198 extern int	lockinst __P((char *util_name, char *pkg_name, char *place));
199 extern void	lockupd __P((char *place));
200 extern void	unlockinst __P((void));
201 
202 extern char	*pathdup __P((char *s));
203 extern char	*pathalloc __P((int n));
204 extern char	*fixpath __P((char *path));
205 extern char	*get_info_basedir __P((void));
206 extern char	*get_basedir __P((void));
207 extern char	*get_client_basedir __P((void));
208 extern int	set_basedirs __P((int reloc, char *adm_basedir,
209 		    char *pkginst, int nointeract));
210 extern int	eval_path __P((char **server_ptr, char **client_ptr,
211 		    char **map_ptr, char *path));
212 extern int	get_orig_offset __P((void));
213 extern char	*get_inst_root __P((void));
214 extern char	*get_mount_point __P((short n));
215 extern char	*get_remote_path __P((short n));
216 extern void	set_env_cbdir __P((void));
217 extern int	set_inst_root __P((char *path));
218 extern void	put_path_params __P((void));
219 extern int	mkpath __P((char *p));
220 extern void	mkbasedir __P((int flag, char *path));
221 extern int	is_an_inst_root __P((void));
222 extern int	is_a_basedir __P((void));
223 extern int	is_a_cl_basedir __P((void));
224 extern int	is_relocatable __P((void));
225 extern char	*orig_path __P((char *path));
226 extern char	*orig_path_ptr __P((char *path));
227 extern char	*qreason __P((int caller, int retcode, int started,
228 			int includeZonename));
229 extern char	*qstrdup __P((char *s));
230 extern char	*srcpath __P((char *d, char *p, int part, int nparts));
231 extern int	copyf __P((char *from, char *to, time_t mytime));
232 extern int	copyFile __P((int, int, char *, char *, struct stat *, long));
233 extern int	openLocal __P((char *a_path, int a_oflag, char *a_tmpdir));
234 extern int	dockdeps __P((char *depfile, int removeFlag,
235 			boolean_t a_preinstallCheck));
236 extern int	finalck __P((struct cfent *ept, int attrchg, int contchg,
237 			boolean_t a_warning));
238 
239 /* dockdeps.c */
240 extern void setUpdate __P((void));
241 extern int  isUpdate __P((void));
242 extern void setPatchUpdate __P((void));
243 extern int  isPatchUpdate __P((void));
244 
245 /* mntinfo.c */
246 extern int	get_mntinfo __P((int map_client, char *vfstab_file));
247 extern short	fsys __P((char *path));
248 extern struct fstable *get_fs_entry __P((short n));
249 extern int	mount_client __P((void));
250 extern int	unmount_client __P((void));
251 extern short	resolved_fsys __P((char *path));
252 extern char	*get_server_host __P((short n));
253 extern char	*server_map __P((char *path, short fsys_value));
254 extern int	use_srvr_map __P((char *path, short *fsys_value));
255 extern int	use_srvr_map_n __P((short n));
256 extern int	is_fs_writeable __P((char *path, short *fsys_value));
257 extern int	is_remote_fs __P((char *path, short *fsys_value));
258 extern int	is_served __P((char *path, short *fsys_value));
259 extern int	is_mounted __P((char *path, short *fsys_value));
260 extern int	is_fs_writeable_n __P((short n));
261 extern int	is_remote_fs_n __P((short n));
262 extern int	is_served_n __P((short n));
263 extern int	is_mounted_n __P((short n));
264 extern fsblkcnt_t	get_blk_size_n __P((short n));
265 extern fsblkcnt_t	get_frag_size_n __P((short n));
266 extern fsblkcnt_t	get_blk_used_n __P((short n));
267 extern fsblkcnt_t	get_blk_free_n __P((short n));
268 extern fsblkcnt_t	get_inode_used_n __P((short n));
269 extern fsblkcnt_t	get_inode_free_n __P((short n));
270 extern void	set_blk_used_n __P((short n, fsblkcnt_t value));
271 extern char	*get_source_name_n __P((short n));
272 extern char	*get_fs_name_n __P((short n));
273 extern int	load_fsentry __P((struct fstable *fs_entry, char *name,
274 		    char *fstype, char *remote_name));
275 extern int	isreloc __P((char *pkginstdir));
276 extern int	is_local_host __P((char *hostname));
277 extern void	fs_tab_free __P((void));
278 
279 /* pkgdbmerg.c */
280 extern int	pkgdbmerg __P((PKGserver server, VFP_T *tmpvfp,
281 		    struct cfextra **extlist));
282 extern int	files_installed __P((void));
283 
284 /* ocfile.c */
285 extern int	trunc_tcfile __P((int fd));
286 extern int	ocfile __P((PKGserver *serverp, VFP_T **tmpvfp,
287 			fsblkcnt_t map_blks));
288 extern int	swapcfile __P((PKGserver server, VFP_T **a_tmpvfp,
289 			char *pkginst, int dbchg));
290 extern int	set_cfdir __P((char *cfdir));
291 extern int	socfile __P((PKGserver *server, boolean_t quiet));
292 extern int	relslock __P((void));
293 extern int	pkgWlock __P((int verbose));
294 extern int	iscfile __P((void));
295 extern int	vcfile __P((void));
296 
297 extern fsblkcnt_t	nblk __P((fsblkcnt_t size, ulong_t bsize,
298 			ulong_t frsize));
299 extern struct	cfent **procmap __P((VFP_T *vfp, int mapflag, char *ir));
300 extern void	repl_cfent __P((struct cfent *new, struct cfent *old));
301 extern struct	cfextra **pkgobjmap __P((VFP_T *vfp, int mapflag, char *ir));
302 extern void	pkgobjinit __P((void));
303 extern int	seed_pkgobjmap __P((struct cfextra *ext_entry, char *path,
304 		    char *local));
305 extern int	init_pkgobjspace __P((void));
306 
307 /* eptstat.c */
308 extern void	pinfo_free __P((void));
309 extern struct	pinfo *eptstat __P((struct cfent *entry, char *pkg, char c));
310 
311 /* echo.c */
312 /*PRINTFLIKE1*/
313 extern void	echo __P((char *a_fmt, ...));
314 /*PRINTFLIKE1*/
315 extern void	echoDebug __P((char *a_fmt, ...));
316 extern boolean_t	echoGetFlag __P((void));
317 extern boolean_t	echoDebugGetFlag __P((void));
318 extern boolean_t	echoSetFlag __P((boolean_t a_debugFlag));
319 extern boolean_t	echoDebugSetFlag __P((boolean_t a_debugFlag));
320 
321 /* psvr4ck.c */
322 extern void	psvr4cnflct __P((void));
323 extern void	psvr4mail __P((char *list, char *msg, int retcode, char *pkg));
324 extern void	psvr4pkg __P((char **ppkg));
325 
326 /* ptext.c */
327 /*PRINTFLIKE2*/
328 extern void	ptext __P((FILE *fp, char *fmt, ...));
329 
330 /* putparam.c */
331 extern void	putparam __P((char *param, char *value));
332 extern void	getuserlocale __P((void));
333 extern void	putuserlocale __P((void));
334 extern void	putConditionInfo __P((char *, char *));
335 
336 /* setadmin.c */
337 extern void		setadminFile __P((char *file));
338 extern char		*setadminSetting __P((char *a_paramName,
339 				char *a_paramValue));
340 extern char		*set_keystore_admin __P((void));
341 extern boolean_t	get_proxy_port_admin __P((char **, ushort_t *));
342 extern boolean_t	check_keystore_admin __P((char **));
343 extern int		web_ck_retries __P((void));
344 extern int		web_ck_timeout __P((void));
345 extern int		web_ck_authentication __P((void));
346 
347 /* setlist.c */
348 extern char	*cl_iscript __P((int idx));
349 extern char	*cl_rscript __P((int idx));
350 extern void	find_CAS __P((int CAS_type, char *bin_ptr, char *inst_ptr));
351 extern int	setlist __P((struct cl_attr ***plist, char *slist));
352 extern void	addlist __P((struct cl_attr ***plist, char *item));
353 extern char	*cl_nam __P((int cl_idx));
354 extern char	*flex_device(char *device_name, int dev_ok);
355 extern int	cl_getn __P((void));
356 extern int	cl_idx __P((char *cl_nam));
357 extern void	cl_sets __P((char *slist));
358 extern void	cl_setl __P((struct cl_attr **cl_lst));
359 extern void	cl_putl __P((char *parm_name, struct cl_attr **list));
360 extern int	cl_deliscript __P((int i));
361 extern unsigned	cl_svfy __P((int i));
362 extern unsigned	cl_dvfy __P((int i));
363 extern unsigned	cl_pthrel __P((int i));
364 
365 /* passwd.c */
366 extern int	pkg_passphrase_cb __P((char *, int, int, void *));
367 extern void	set_passarg __P((char *));
368 extern void	set_prompt __P((char *));
369 
370 /* fixpath.c */
371 extern void __P(export_client_env(char *));
372 extern void __P(set_partial_inst(void));
373 extern int __P(is_partial_inst(void));
374 extern void __P(set_depend_pkginfo_DB(boolean_t a_setting));
375 extern boolean_t __P(is_depend_pkginfo_DB(void));
376 extern void __P(disable_spool_create(void));
377 extern int __P(is_spool_create(void));
378 
379 /* open_package_datastream.c */
380 extern boolean_t	open_package_datastream(int a_argc, char **a_argv,
381 				char *a_spoolto, char *a_device,
382 				int *r_repeat, char **r_idsName,
383 				char *a_tmpdir, struct pkgdev *a_pkgdev,
384 				int a_optind);
385 
386 /* setup_temporary_directory.c */
387 extern boolean_t	setup_temporary_directory(char **r_dirname,
388 				char *a_tmpdir, char *a_suffix);
389 
390 /* unpack_package_from_stream.c */
391 extern boolean_t	unpack_package_from_stream(char *a_idsName,
392 				char *a_pkginst, char *a_tempDir);
393 
394 /* pkgops.c */
395 
396 extern boolean_t	pkgAddPackageToGzonlyList(char *a_pkgInst,
397 				char *a_rootPath);
398 extern void		pkgAddThisZonePackage(char *a_pkgInst);
399 extern boolean_t	pkgRemovePackageFromGzonlyList(char *a_rootPath,
400 				char *a_pkgInst);
401 extern FILE		*pkgOpenInGzOnlyFile(char *a_rootPath);
402 extern void		pkginfoFree(struct pkginfo **r_info);
403 extern boolean_t	pkginfoIsPkgInstalled(struct pkginfo **r_pinfo,
404 				char *a_pkgInst);
405 extern boolean_t	pkgIsPkgInGzOnly(char *a_rootPath, char *a_pkgInst);
406 extern boolean_t	pkgIsPkgInGzOnlyFP(FILE *a_fp, char *a_pkgInst);
407 extern boolean_t	pkginfoParamTruth(FILE *a_fp, char *a_param,
408 				char *a_value, boolean_t a_default);
409 extern int		pkgGetPackageList(char ***r_pkgList, char **a_argv,
410 				int a_optind, char *a_categories,
411 				char **a_categoryList, struct pkgdev *a_pkgdev);
412 extern void		pkgLocateHighestInst(char *r_path, int r_pathLen,
413 				char *r_pkgInst, int r_pkgInstLen,
414 				char *a_rootPath, char *a_pkgInst);
415 extern boolean_t	pkgPackageIsThisZone(char *a_pkgInst);
416 extern boolean_t	pkgMatchInherited(char *a_src, char *a_dst,
417 				char *a_rootDir, char a_mode, time_t a_modtime,
418 				char a_ftype, unsigned long a_cksum);
419 extern char		*pkgGetGzOnlyPath(void);
420 extern boolean_t	pkgTestInstalled(char *a_packageName, char *a_rootPath);
421 
422 /* depchk.c */
423 
424 struct depckErrorRecord {
425 	int	ier_numZones;
426 	char	*ier_packageName;
427 	char	**ier_zones;
428 	char	**ier_values;
429 };
430 
431 typedef struct depckErrorRecord depckErrorRecord_t;
432 
433 struct depckError {
434 	int			er_numEntries;
435 	depckErrorRecord_t	*er_theEntries;
436 };
437 
438 typedef struct depckError depckError_t;
439 
440 typedef int (depcklFunc_t)(char *a_msg, char *a_pkg);
441 
442 /*
443  * ignore_values:
444  *	== NULL - record one message for each instance of "name" found
445  *	== "" - record multiple instances
446  *	!= "" - record multiple instances if value not in ignore_values
447  */
448 
449 struct depckl_struct {
450 	char		*name;
451 	char		*ignore_values;
452 	char		**err_msg;
453 	depcklFunc_t	*depcklFunc;
454 	depckError_t	*record;
455 };
456 
457 typedef struct depckl_struct depckl_t;
458 
459 extern int		depchkReportErrors(depckl_t *depckl);
460 extern void		depchkRecordError(depckError_t *a_erc,
461 				char *a_pkginst, char *a_zoneName,
462 				char *a_value);
463 
464 /* log.c */
465 
466 /* types of log messages we recognize */
467 typedef enum {
468 	LOG_MSG_ERR,
469 	LOG_MSG_WRN,
470 	LOG_MSG_INFO,
471 	LOG_MSG_DEBUG
472 } LogMsgType;
473 
474 /*PRINTFLIKE2*/
475 extern	void		log_msg(LogMsgType, const char *, ...);
476 extern	void		log_set_verbose(boolean_t);
477 extern	boolean_t	log_get_verbose(void);
478 
479 /*
480  * typedef for the 'ckreturn' function
481  */
482 typedef void (ckreturnFunc_t)(int a_retcode);
483 
484 /* sml.c */
485 
486 /* null reference to SML_TAG object */
487 
488 #define	SML_TAG__NULL		((SML_TAG*)NULL)
489 
490 /* null reference to SML_TAG * object */
491 
492 #define	SML_TAG__R_NULL		((SML_TAG**)NULL)
493 
494 /* is reference to SML_TAG object valid? */
495 
496 #define	SML_TAG__ISVALID(tag)	((tag) != (SML_TAG__NULL))
497 
498 /* is indirect reference to SML_TAG object valid? */
499 
500 #define	SML_TAG__R_ISVALID(r_tag)	\
501 	((r_tag) != ((SML_TAG**)(SML_TAG__NULL)))
502 
503 /* definitions for sml passed from pkginstall to pkgcond */
504 
505 #define	PKGCOND_GLOBAL_VARIABLE	"SUNW_PKGCOND_GLOBAL_DATA"
506 #define	TAG_COND_TOPLEVEL	"environmentConditionInformation"
507 #define	TAG_COND_PARENT_ZONE	"parentZone"
508 #define	TAG_COND_CURRENT_ZONE	"currentZone"
509 #define	TAG_COND_ZONE_NAME	"zoneName"
510 #define	TAG_COND_ZONE_TYPE	"zoneType"
511 #define	TAG_COND_INHERITED_FS	"inheritedFileSystem"
512 #define	TAG_COND_FS_NAME	"fileSystemName"
513 #define	TAG_VALUE_GLOBAL_ZONE	"global"
514 #define	TAG_VALUE_NONGLOBAL_ZONE	"nonglobal"
515 
516 typedef struct _sml_tag_struct SML_TAG;
517 typedef struct _sml_parameter_struct SML_PARAM;
518 
519 struct _sml_tag_struct {
520 	char		*name;		/* tag name */
521 	int		params_num;	/* # params in *params */
522 	SML_PARAM	*params;	/* tag parameters */
523 	int		tags_num;	/* # subtags in *tags */
524 	SML_TAG		*tags;		/* tag subtags */
525 };
526 
527 struct _sml_parameter_struct {
528 	char	*name;		/* tag name */
529 	char	*value;		/* parameters */
530 };
531 
532 SML_TAG		*smlAddTag(SML_TAG **r_tag, int a_index,
533 			SML_TAG *a_subTag);
534 boolean_t	smlFstatCompareEq(struct stat *statbuf,
535 				SML_TAG *tag, char *path);
536 char		*smlConvertTagToString(SML_TAG *tag);
537 /*PRINTFLIKE2*/
538 void		smlDbgPrintTag(SML_TAG *a_tag, char *a_format, ...);
539 void		smlDelTag(SML_TAG *tag, SML_TAG *sub_tag);
540 void		smlDelParam(SML_TAG *tag, char *name);
541 SML_TAG		*smlDup(SML_TAG *tag);
542 boolean_t	smlFindAndDelTag(SML_TAG *tag, char *findTag);
543 void		smlFreeTag(SML_TAG *tag);
544 char		*smlGetElementName(SML_TAG *a_tag);
545 int		smlGetNumParams(SML_TAG *a_tag);
546 char		*smlGetParam(SML_TAG *tag, char *name);
547 /*PRINTFLIKE2*/
548 char		*smlGetParamF(SML_TAG *tag, char *format, ...);
549 void		smlGetParam_r(SML_TAG *tag, char *name, char *buf,
550 			int bufLen);
551 char		*smlGetParamByTag(SML_TAG *tag, int index,
552 			char *tagName, char *parmName);
553 char		*smlGetParamByTagParam(SML_TAG *tag, int index,
554 			char *tagName, char *parmName, char *parmValue,
555 			char *parmReturn);
556 char		*smlGetParamName(SML_TAG *tag, int index);
557 SML_TAG		*smlGetTag(SML_TAG *tag, int index);
558 SML_TAG		*smlGetTagByName(SML_TAG *tag, int index, char *name);
559 SML_TAG		*smlGetTagByTagParam(SML_TAG *tag, int index,
560 			char *tagName, char *paramName, char *paramValue);
561 boolean_t	smlGetVerbose(void);
562 int		smlLoadTagFromFile(SML_TAG **r_tag, char *a_fileName);
563 SML_TAG		*smlNewTag(char *name);
564 boolean_t	smlParamEq(SML_TAG *tag, char *findTag,
565 			char *findParam, char *str);
566 /*PRINTFLIKE4*/
567 boolean_t	smlParamEqF(SML_TAG *tag, char *findTag, char *findParam,
568 			char *format, ...);
569 void		smlPrintTag(SML_TAG *tag);
570 int		smlReadOneTag(SML_TAG **r_tag, char *a_str);
571 int		smlConvertStringToTag(SML_TAG **r_tag, char *str);
572 void		smlSetFileStatInfo(SML_TAG **tag,
573 				struct stat *statbuf, char *path);
574 void		smlSetParam(SML_TAG *tag, char *name, char *value);
575 /*PRINTFLIKE3*/
576 void		smlSetParamF(SML_TAG *tag, char *name, char *format, ...);
577 void		smlSetVerbose(boolean_t a_setting);
578 int		smlWriteTagToFd(SML_TAG *tag, int fd);
579 int		smlWriteTagToFile(SML_TAG *tag, char *filename);
580 /*PRINTFLIKE3*/
581 void		sml_strPrintf_r(char *a_buf, int a_bufLen, char *a_format, ...);
582 /*PRINTFLIKE1*/
583 char 		*sml_strPrintf(char *a_format, ...);
584 char		*sml_XmlEncodeString(char *a_plainTextString);
585 char		*sml_XmlDecodeString(char *a_xmlEncodedString);
586 
587 #if defined(lint) && !defined(gettext)
588 #define	gettext(x)	x
589 #endif	/* defined(lint) && !defined(gettext) */
590 
591 #ifdef __cplusplus
592 }
593 #endif
594 
595 #endif	/* __HDRS_LIBINST_H__ */
596