306 /*
307 * Closes the given brand handle
308 */
309 void
310 brand_close(brand_handle_t bh)
311 {
312 struct brand_handle *bhp = (struct brand_handle *)bh;
313 if (bhp->bh_platform != NULL)
314 xmlFreeDoc(bhp->bh_platform);
315 if (bhp->bh_config != NULL)
316 xmlFreeDoc(bhp->bh_config);
317 free(bhp);
318 }
319
320 static int
321 i_substitute_tokens(const char *sbuf, char *dbuf, int dbuf_size,
322 const char *zonename, const char *zonepath, const char *username,
323 const char *curr_zone)
324 {
325 int dst, src;
326 static char *env_pool = NULL;
327
328 /*
329 * Walk through the characters, substituting values as needed.
330 */
331 dbuf[0] = '\0';
332 dst = 0;
333 for (src = 0; src < strlen((char *)sbuf) && dst < dbuf_size; src++) {
334 if (sbuf[src] != '%') {
335 dbuf[dst++] = sbuf[src];
336 continue;
337 }
338
339 switch (sbuf[++src]) {
340 case '%':
341 dst += strlcpy(dbuf + dst, "%", dbuf_size - dst);
342 break;
343 case 'P':
344 if (env_pool == NULL)
345 env_pool = getenv("_ZONEADMD_ZPOOL");
346 if (env_pool == NULL)
347 break;
348 dst += strlcpy(dbuf + dst, env_pool, dbuf_size - dst);
349 break;
350 case 'R':
351 if (zonepath == NULL)
352 break;
353 dst += strlcpy(dbuf + dst, zonepath, dbuf_size - dst);
354 break;
355 case 'u':
356 if (username == NULL)
357 break;
358 dst += strlcpy(dbuf + dst, username, dbuf_size - dst);
359 break;
360 case 'Z':
361 if (curr_zone == NULL)
362 break;
363 /* name of the zone we're running in */
364 dst += strlcpy(dbuf + dst, curr_zone, dbuf_size - dst);
365 break;
366 case 'z':
367 /* name of the zone we're operating on */
368 if (zonename == NULL)
369 break;
|
306 /*
307 * Closes the given brand handle
308 */
309 void
310 brand_close(brand_handle_t bh)
311 {
312 struct brand_handle *bhp = (struct brand_handle *)bh;
313 if (bhp->bh_platform != NULL)
314 xmlFreeDoc(bhp->bh_platform);
315 if (bhp->bh_config != NULL)
316 xmlFreeDoc(bhp->bh_config);
317 free(bhp);
318 }
319
320 static int
321 i_substitute_tokens(const char *sbuf, char *dbuf, int dbuf_size,
322 const char *zonename, const char *zonepath, const char *username,
323 const char *curr_zone)
324 {
325 int dst, src;
326
327 /*
328 * Walk through the characters, substituting values as needed.
329 */
330 dbuf[0] = '\0';
331 dst = 0;
332 for (src = 0; src < strlen((char *)sbuf) && dst < dbuf_size; src++) {
333 if (sbuf[src] != '%') {
334 dbuf[dst++] = sbuf[src];
335 continue;
336 }
337
338 switch (sbuf[++src]) {
339 case '%':
340 dst += strlcpy(dbuf + dst, "%", dbuf_size - dst);
341 break;
342 case 'R':
343 if (zonepath == NULL)
344 break;
345 dst += strlcpy(dbuf + dst, zonepath, dbuf_size - dst);
346 break;
347 case 'u':
348 if (username == NULL)
349 break;
350 dst += strlcpy(dbuf + dst, username, dbuf_size - dst);
351 break;
352 case 'Z':
353 if (curr_zone == NULL)
354 break;
355 /* name of the zone we're running in */
356 dst += strlcpy(dbuf + dst, curr_zone, dbuf_size - dst);
357 break;
358 case 'z':
359 /* name of the zone we're operating on */
360 if (zonename == NULL)
361 break;
|