diff options
Diffstat (limited to 'usr/src/cmd/svc/svccfg/svccfg.y')
-rw-r--r-- | usr/src/cmd/svc/svccfg/svccfg.y | 75 |
1 files changed, 69 insertions, 6 deletions
diff --git a/usr/src/cmd/svc/svccfg/svccfg.y b/usr/src/cmd/svc/svccfg/svccfg.y index c5b5cede9c..311a2d6de1 100644 --- a/usr/src/cmd/svc/svccfg/svccfg.y +++ b/usr/src/cmd/svc/svccfg/svccfg.y @@ -19,6 +19,7 @@ * * CDDL HEADER END */ + /* * Copyright 2007 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. @@ -43,7 +44,7 @@ uu_list_pool_t *string_pool; %start commands %token SCC_VALIDATE SCC_IMPORT SCC_EXPORT SCC_ARCHIVE SCC_APPLY SCC_EXTRACT -%token SCC_REPOSITORY SCC_INVENTORY SCC_SET SCC_END SCC_HELP +%token SCC_REPOSITORY SCC_INVENTORY SCC_SET SCC_END SCC_HELP SCC_RESTORE %token SCC_LIST SCC_ADD SCC_DELETE SCC_SELECT SCC_UNSELECT %token SCC_LISTPG SCC_ADDPG SCC_DELPG %token SCC_LISTPROP SCC_SETPROP SCC_DELPROP SCC_EDITPROP @@ -75,6 +76,7 @@ command : terminator | import_cmd | export_cmd | archive_cmd + | restore_cmd | apply_cmd | extract_cmd | repository_cmd @@ -128,7 +130,7 @@ unknown_cmd : SCV_WORD terminator validate_cmd : SCC_VALIDATE SCV_WORD terminator { bundle_t *b = internal_bundle_new(); - lxml_get_bundle_file(b, $2, 0); + lxml_get_bundle_file(b, $2, SVCCFG_OP_IMPORT); (void) internal_bundle_free(b); free($2); } @@ -155,28 +157,87 @@ import_cmd : SCC_IMPORT string_list terminator export_cmd : SCC_EXPORT SCV_WORD terminator { - lscf_service_export($2, NULL); + lscf_service_export($2, NULL, 0); free($2); } | SCC_EXPORT SCV_WORD SCS_REDIRECT SCV_WORD terminator { - lscf_service_export($2, $4); + lscf_service_export($2, $4, 0); free($2); free($4); } + | SCC_EXPORT SCV_WORD SCV_WORD terminator + { + if (strcmp($2, "-a") == 0) { + lscf_service_export($3, NULL, SCE_ALL_VALUES); + free($2); + free($3); + } else { + synerr(SCC_EXPORT); + free($2); + free($3); + return (0); + } + } + | SCC_EXPORT SCV_WORD SCV_WORD SCS_REDIRECT SCV_WORD terminator + { + if (strcmp($2, "-a") == 0) { + lscf_service_export($3, $5, SCE_ALL_VALUES); + free($2); + free($3); + free($5); + } else { + synerr(SCC_EXPORT); + free($2); + free($3); + free($5); + return (0); + } + } | SCC_EXPORT error terminator { synerr(SCC_EXPORT); return(0); } archive_cmd : SCC_ARCHIVE terminator { - lscf_archive(NULL); + lscf_archive(NULL, 0); + } + | SCC_ARCHIVE SCV_WORD terminator + { + if (strcmp($2, "-a") == 0) { + lscf_archive(NULL, SCE_ALL_VALUES); + free($2); + } else { + synerr(SCC_ARCHIVE); + free($2); + return (0); + } } | SCC_ARCHIVE SCS_REDIRECT SCV_WORD terminator { - lscf_archive($3); + lscf_archive($3, 0); free($3); } + | SCC_ARCHIVE SCV_WORD SCS_REDIRECT SCV_WORD terminator + { + if (strcmp($2, "-a") == 0) { + lscf_archive($4, SCE_ALL_VALUES); + free($2); + free($4); + } else { + synerr(SCC_ARCHIVE); + free($2); + free($4); + return (0); + } + } | SCC_ARCHIVE error terminator { synerr(SCC_ARCHIVE); return(0); } +restore_cmd : SCC_RESTORE SCV_WORD terminator + { + (void) engine_restore($2); + free($2); + } + | SCC_RESTORE error terminator { synerr(SCC_RESTORE); return(0); } + apply_cmd : SCC_APPLY SCV_WORD terminator { (void) engine_apply($2); free($2); } | SCC_APPLY error terminator { synerr(SCC_APPLY); return(0); } @@ -254,6 +315,8 @@ delete_cmd : SCC_DELETE SCV_WORD terminator free($3); } else { synerr(SCC_DELETE); + free($2); + free($3); return(0); } } |