summaryrefslogtreecommitdiff
path: root/runtime/syntax/sudoers.vim
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/syntax/sudoers.vim')
-rw-r--r--runtime/syntax/sudoers.vim290
1 files changed, 290 insertions, 0 deletions
diff --git a/runtime/syntax/sudoers.vim b/runtime/syntax/sudoers.vim
new file mode 100644
index 000000000..72a7890be
--- /dev/null
+++ b/runtime/syntax/sudoers.vim
@@ -0,0 +1,290 @@
+" Vim syntax file
+" Language: sudoers(5) configuration files.
+" Maintainer: Nikolai Weibull <source@pcppopper.org>
+" URL: http://www.pcppopper.org/
+" Latest Revision: 2004-12-17
+" arch-tag: 02fc3bc8-4308-466f-b83e-718a7487b198
+
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+" TODO: instead of 'skipnl', we would like to match a specific group that would
+" match \\$ and then continue with the nextgroup, actually, the skipnl doesn't
+" work...
+" TODO: treat 'ALL' like a special (yay, a bundle of new rules!!!)
+
+" User Specs
+syn match sudoersUserSpec '^' nextgroup=@sudoersUserInSpec skipwhite
+
+syn match sudoersSpecEquals contained '=' nextgroup=@sudoersCmndSpecList skipwhite
+
+syn cluster sudoersCmndSpecList contains=sudoersUserRunasBegin,sudoersPASSWD,@sudoersCmndInSpec
+
+" Todo
+syn keyword sudoersTodo contained TODO FIXME XXX NOTE
+
+" Comments
+syn region sudoersComment matchgroup=sudoersComment start='#' end='$' contains=sudoersTodo
+
+" Aliases
+syn keyword sudoersAlias User_Alias Runas_Alias nextgroup=sudoersUserAlias skipwhite skipnl
+syn keyword sudoersAlias Host_Alias nextgroup=sudoersHostAlias skipwhite skipnl
+syn keyword sudoersAlias Cmnd_Alias nextgroup=sudoersCmndAlias skipwhite skipnl
+
+" Names
+syn match sudoersUserAlias contained '\<\u[A-Z0-9_]*\>' nextgroup=sudoersUserAliasEquals skipwhite skipnl
+syn match sudoersUserNameInList contained '\<\l\+\>' nextgroup=@sudoersUserList skipwhite skipnl
+syn match sudoersUIDInList contained '#\d\+\>' nextgroup=@sudoersUserList skipwhite skipnl
+syn match sudoersGroupInList contained '%\l\+\>' nextgroup=@sudoersUserList skipwhite skipnl
+syn match sudoersUserNetgroupInList contained '+\l\+\>' nextgroup=@sudoersUserList skipwhite skipnl
+syn match sudoersUserAliasInList contained '\<\u[A-Z0-9_]*\>' nextgroup=@sudoersUserList skipwhite skipnl
+
+syn match sudoersUserName contained '\<\l\+\>' nextgroup=@sudoersParameter skipwhite skipnl
+syn match sudoersUID contained '#\d\+\>' nextgroup=@sudoersParameter skipwhite skipnl
+syn match sudoersGroup contained '%\l\+\>' nextgroup=@sudoersParameter skipwhite skipnl
+syn match sudoersUserNetgroup contained '+\l\+\>' nextgroup=@sudoersParameter skipwhite skipnl
+syn match sudoersUserAliasRef contained '\<\u[A-Z0-9_]*\>' nextgroup=@sudoersParameter skipwhite skipnl
+
+syn match sudoersUserNameInSpec contained '\<\l\+\>' nextgroup=@sudoersUserSpec skipwhite skipnl
+syn match sudoersUIDInSpec contained '#\d\+\>' nextgroup=@sudoersUserSpec skipwhite skipnl
+syn match sudoersGroupInSpec contained '%\l\+\>' nextgroup=@sudoersUserSpec skipwhite skipnl
+syn match sudoersUserNetgroupInSpec contained '+\l\+\>' nextgroup=@sudoersUserSpec skipwhite skipnl
+syn match sudoersUserAliasInSpec contained '\<\u[A-Z0-9_]*\>' nextgroup=@sudoersUserSpec skipwhite skipnl
+
+syn match sudoersUserNameInRunas contained '\<\l\+\>' nextgroup=@sudoersUserRunas skipwhite skipnl
+syn match sudoersUIDInRunas contained '#\d\+\>' nextgroup=@sudoersUserRunas skipwhite skipnl
+syn match sudoersGroupInRunas contained '%\l\+\>' nextgroup=@sudoersUserRunas skipwhite skipnl
+syn match sudoersUserNetgroupInRunas contained '+\l\+\>' nextgroup=@sudoersUserRunas skipwhite skipnl
+syn match sudoersUserAliasInRunas contained '\<\u[A-Z0-9_]*\>' nextgroup=@sudoersUserRunas skipwhite skipnl
+
+syn match sudoersHostAlias contained '\<\u[A-Z0-9_]*\>' nextgroup=sudoersHostAliasEquals skipwhite skipnl
+syn match sudoersHostNameInList contained '\<\l\+\>' nextgroup=@sudoersHostList skipwhite skipnl
+syn match sudoersIPAddrInList contained '\%(\d\{1,3}\.\)\{3}\d\{1,3}' nextgroup=@sudoersHostList skipwhite skipnl
+syn match sudoersNetworkInList contained '\%(\d\{1,3}\.\)\{3}\d\{1,3}\%(/\%(\%(\d\{1,3}\.\)\{3}\d\{1,3}\|\d\+\)\)\=' nextgroup=@sudoersHostList skipwhite skipnl
+syn match sudoersHostNetgroupInList contained '+\l\+\>' nextgroup=@sudoersHostList skipwhite skipnl
+syn match sudoersHostAliasInList contained '\<\u[A-Z0-9_]*\>' nextgroup=@sudoersHostList skipwhite skipnl
+
+syn match sudoersHostName contained '\<\l\+\>' nextgroup=@sudoersParameter skipwhite skipnl
+syn match sudoersIPAddr contained '\%(\d\{1,3}\.\)\{3}\d\{1,3}' nextgroup=@sudoersParameter skipwhite skipnl
+syn match sudoersNetwork contained '\%(\d\{1,3}\.\)\{3}\d\{1,3}\%(/\%(\%(\d\{1,3}\.\)\{3}\d\{1,3}\|\d\+\)\)\=' nextgroup=@sudoersParameter skipwhite skipnl
+syn match sudoersHostNetgroup contained '+\l\+\>' nextgroup=@sudoersParameter skipwhite skipnl
+syn match sudoersHostAliasRef contained '\<\u[A-Z0-9_]*\>' nextgroup=@sudoersParameter skipwhite skipnl
+
+syn match sudoersHostNameInSpec contained '\<\l\+\>' nextgroup=@sudoersHostSpec skipwhite skipnl
+syn match sudoersIPAddrInSpec contained '\%(\d\{1,3}\.\)\{3}\d\{1,3}' nextgroup=@sudoersHostSpec skipwhite skipnl
+syn match sudoersNetworkInSpec contained '\%(\d\{1,3}\.\)\{3}\d\{1,3}\%(/\%(\%(\d\{1,3}\.\)\{3}\d\{1,3}\|\d\+\)\)\=' nextgroup=@sudoersHostSpec skipwhite skipnl
+syn match sudoersHostNetgroupInSpec contained '+\l\+\>' nextgroup=@sudoersHostSpec skipwhite skipnl
+syn match sudoersHostAliasInSpec contained '\<\u[A-Z0-9_]*\>' nextgroup=@sudoersHostSpec skipwhite skipnl
+
+syn match sudoersCmndAlias contained '\<\u[A-Z0-9_]*\>' nextgroup=sudoersCmndAliasEquals skipwhite skipnl
+syn match sudoersCmndNameInList contained '[^[:space:],:=\\]\+\%(\\[[:space:],:=\\][^[:space:],:=\\]*\)*' nextgroup=@sudoersCmndList,sudoersCommandEmpty,sudoersCommandArgs skipwhite
+syn match sudoersCmndAliasInList contained '\<\u[A-Z0-9_]*\>' nextgroup=@sudoersCmndList skipwhite skipnl
+
+syn match sudoersCmndNameInSpec contained '[^[:space:],:=\\]\+\%(\\[[:space:],:=\\][^[:space:],:=\\]*\)*' nextgroup=@sudoersCmndSpec,sudoersCommandEmptyInSpec,sudoersCommandArgsInSpec skipwhite
+syn match sudoersCmndAliasInSpec contained '\<\u[A-Z0-9_]*\>' nextgroup=@sudoersCmndSpec skipwhite skipnl
+
+" Delimiters
+syn match sudoersUserAliasEquals contained '=' nextgroup=@sudoersUserInList skipwhite skipnl
+syn match sudoersUserListComma contained ',' nextgroup=@sudoersUserInList skipwhite skipnl
+syn match sudoersUserListColon contained ':' nextgroup=sudoersUserAlias skipwhite skipnl
+syn cluster sudoersUserList contains=sudoersUserListComma,sudoersUserListColon
+
+syn match sudoersUserSpecComma contained ',' nextgroup=@sudoersUserInSpec skipwhite skipnl
+syn cluster sudoersUserSpec contains=sudoersUserSpecComma,@sudoersHostInSpec
+
+syn match sudoersUserRunasBegin contained '(' nextgroup=@sudoersUserInRunas skipwhite skipnl
+syn match sudoersUserRunasComma contained ',' nextgroup=@sudoersUserInRunas skipwhite skipnl
+syn match sudoersUserRunasEnd contained ')' nextgroup=sudoersPASSWD,@sudoersCmndInSpec skipwhite skipnl
+syn cluster sudoersUserRunas contains=sudoersUserRunasComma,@sudoersUserInRunas,sudoersUserRunasEnd
+
+
+syn match sudoersHostAliasEquals contained '=' nextgroup=@sudoersHostInList skipwhite skipnl
+syn match sudoersHostListComma contained ',' nextgroup=@sudoersHostInList skipwhite skipnl
+syn match sudoersHostListColon contained ':' nextgroup=sudoersHostAlias skipwhite skipnl
+syn cluster sudoersHostList contains=sudoersHostListComma,sudoersHostListColon
+
+syn match sudoersHostSpecComma contained ',' nextgroup=@sudoersHostInSpec skipwhite skipnl
+syn cluster sudoersHostSpec contains=sudoersHostSpecComma,sudoersSpecEquals
+
+
+syn match sudoersCmndAliasEquals contained '=' nextgroup=@sudoersCmndInList skipwhite skipnl
+syn match sudoersCmndListComma contained ',' nextgroup=@sudoersCmndInList skipwhite skipnl
+syn match sudoersCmndListColon contained ':' nextgroup=sudoersCmndAlias skipwhite skipnl
+syn cluster sudoersCmndList contains=sudoersCmndListComma,sudoersCmndListColon
+
+syn match sudoersCmndSpecComma contained ',' nextgroup=@sudoersCmndSpecList skipwhite skipnl
+syn match sudoersCmndSpecColon contained ':' nextgroup=@sudoersUserInSpec skipwhite skipnl
+syn cluster sudoersCmndSpec contains=sudoersCmndSpecComma,sudoersCmndSpecColon
+
+" Lists
+syn cluster sudoersUserInList contains=sudoersUserNegationInList,sudoersUserNameInList,sudoersUIDInList,sudoersGroupInList,sudoersUserNetgroupInList,sudoersUserAliasInList
+syn cluster sudoersHostInList contains=sudoersHostNegationInList,sudoersHostNameInList,sudoersIPAddrInList,sudoersNetworkInList,sudoersHostNetgroupInList,sudoersHostAliasInList
+syn cluster sudoersCmndInList contains=sudoersCmndNegationInList,sudoersCmndNameInList,sudoersCmndAliasInList
+
+syn cluster sudoersUser contains=sudoersUserNegation,sudoersUserName,sudoersUID,sudoersGroup,sudoersUserNetgroup,sudoersUserAliasRef
+syn cluster sudoersHost contains=sudoersHostNegation,sudoersHostName,sudoersIPAddr,sudoersNetwork,sudoersHostNetgroup,sudoersHostAliasRef
+
+syn cluster sudoersUserInSpec contains=sudoersUserNegationInSpec,sudoersUserNameInSpec,sudoersUIDInSpec,sudoersGroupInSpec,sudoersUserNetgroupInSpec,sudoersUserAliasInSpec
+syn cluster sudoersHostInSpec contains=sudoersHostNegationInSpec,sudoersHostNameInSpec,sudoersIPAddrInSpec,sudoersNetworkInSpec,sudoersHostNetgroupInSpec,sudoersHostAliasInSpec
+syn cluster sudoersUserInRunas contains=sudoersUserNegationInRunas,sudoersUserNameInRunas,sudoersUIDInRunas,sudoersGroupInRunas,sudoersUserNetgroupInRunas,sudoersUserAliasInRunas
+syn cluster sudoersCmndInSpec contains=sudoersCmndNegationInSpec,sudoersCmndNameInSpec,sudoersCmndAliasInSpec
+
+" Operators
+syn match sudoersUserNegationInList contained '!\+' nextgroup=@sudoersUserInList skipwhite skipnl
+syn match sudoersHostNegationInList contained '!\+' nextgroup=@sudoersHostInList skipwhite skipnl
+syn match sudoersCmndNegationInList contained '!\+' nextgroup=@sudoersCmndInList skipwhite skipnl
+
+syn match sudoersUserNegation contained '!\+' nextgroup=@sudoersUser skipwhite skipnl
+syn match sudoersHostNegation contained '!\+' nextgroup=@sudoersHost skipwhite skipnl
+
+syn match sudoersUserNegationInSpec contained '!\+' nextgroup=@sudoersUserInSpec skipwhite skipnl
+syn match sudoersHostNegationInSpec contained '!\+' nextgroup=@sudoersHostInSpec skipwhite skipnl
+syn match sudoersUserNegationInRunas contained '!\+' nextgroup=@sudoersUserInRunas skipwhite skipnl
+syn match sudoersCmndNegationInSpec contained '!\+' nextgroup=@sudoersCmndInSpec skipwhite skipnl
+
+" Arguments
+syn match sudoersCommandArgs contained '[^[:space:],:=\\]\+\%(\\[[:space:],:=\\][^[:space:],:=\\]*\)*' nextgroup=sudoersCommandArgs,@sudoersCmndList skipwhite
+syn match sudoersCommandEmpty contained '""' nextgroup=@sudoersCmndList skipwhite skipnl
+
+syn match sudoersCommandArgsInSpec contained '[^[:space:],:=\\]\+\%(\\[[:space:],:=\\][^[:space:],:=\\]*\)*' nextgroup=sudoersCommandArgsInSpec,@sudoersCmndSpec skipwhite
+syn match sudoersCommandEmptyInSpec contained '""' nextgroup=@sudoersCmndSpec skipwhite skipnl
+
+" Default Entries
+syn keyword sudoersDefaultEntry Defaults nextgroup=sudoersDefaultTypeAt,sudoersDefaultTypeColon,sudoersDefaultTypeGreaterThan,@sudoersParameter skipwhite skipnl
+syn match sudoersDefaultTypeAt contained '@' nextgroup=@sudoersHost skipwhite skipnl
+syn match sudoersDefaultTypeColon contained ':' nextgroup=@sudoersUser skipwhite skipnl
+syn match sudoersDefaultTypeGreaterThan contained '>' nextgroup=@sudoersUser skipwhite skipnl
+
+" TODO: could also deal with special characters here
+syn keyword sudoersBooleanParameter contained long_opt_prompt ignore_dot mail_always mail_badpass mail_no_user mail_no_perms tty_tickets lecture authenticate root_sudo log_host log_year shell_noargs set_home always_set_home path_info preserve_groups fqdn insults requiretty env_editor rootpw runaspw targetpw set_logname stay_setuid env_reset use_loginclass nextgroup=sudoersParameterListComma skipwhite skipnl
+syn keyword sudoersIntegerParameter contained passwd_tries loglinelen timestamp_timeout passwd_timeout umask nextgroup=sudoersIntegerParameterEquals skipwhite skipnl
+syn keyword sudoersStringParameter contained mailsub badpass_message timestampdir timestampowner passprompt runas_default syslog_goodpri syslog_badpri editor logfile syslog mailerpath mailerflags mailto exempt_group verifypw listpw nextgroup=sudoersStringParameterEquals skipwhite skipnl
+syn keyword sudoersListParameter contained env_check env_delete env_keep nextgroup=sudoersListParameterEquals skipwhite skipnl
+
+syn match sudoersParameterListComma contained ',' nextgroup=@sudoersParameter skipwhite skipnl
+
+syn cluster sudoersParameter contains=sudoersBooleanParameter,sudoersIntegerParameterEquals,sudoersStringParameter,sudoersListParameter
+
+syn match sudoersIntegerParameterEquals contained '[+-]\==' nextgroup=sudoersIntegerValue skipwhite skipnl
+syn match sudoersStringParameterEquals contained '[+-]\==' nextgroup=sudoersStringValue skipwhite skipnl
+syn match sudoersListParameterEquals contained '[+-]\==' nextgroup=sudoersListValue skipwhite skipnl
+
+syn match sudoersIntegerValue contained '\d\+' nextgroup=sudoersParameterListComma skipwhite skipnl
+syn match sudoersStringValue contained '[^[:space:],:=\\]*\%(\\[[:space:],:=\\][^[:space:],:=\\]*\)*' nextgroup=sudoersParameterListComma skipwhite skipnl
+syn region sudoersStringValue contained start=+"+ skip=+\\"+ end=+"+ nextgroup=sudoersParameterListComma skipwhite skipnl
+syn match sudoersListValue contained '[^[:space:],:=\\]*\%(\\[[:space:],:=\\][^[:space:],:=\\]*\)*' nextgroup=sudoersParameterListComma skipwhite skipnl
+syn region sudoersListValue contained start=+"+ skip=+\\"+ end=+"+ nextgroup=sudoersParameterListComma skipwhite skipnl
+
+" Special for specs
+syn match sudoersPASSWD contained '\%(NO\)\=PASSWD:' nextgroup=@sudoersCmndInSpec skipwhite
+
+" Define the default highlighting.
+" For version 5.7 and earlier: only when not done already
+" For version 5.8 and later: only when an item doesn't have highlighting yet
+if version >= 508 || !exists("did_sudoers_syn_inits")
+ if version < 508
+ let did_sudoers_syn_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ HiLink sudoersSpecEquals Operator
+ HiLink sudoersTodo Todo
+ HiLink sudoersComment Comment
+ HiLink sudoersAlias Keyword
+ HiLink sudoersUserAlias Identifier
+ HiLink sudoersUserNameInList String
+ HiLink sudoersUIDInList Number
+ HiLink sudoersGroupInList PreProc
+ HiLink sudoersUserNetgroupInList PreProc
+ HiLink sudoersUserAliasInList PreProc
+ HiLink sudoersUserName String
+ HiLink sudoersUID Number
+ HiLink sudoersGroup PreProc
+ HiLink sudoersUserNetgroup PreProc
+ HiLink sudoersUserAliasRef PreProc
+ HiLink sudoersUserNameInSpec String
+ HiLink sudoersUIDInSpec Number
+ HiLink sudoersGroupInSpec PreProc
+ HiLink sudoersUserNetgroupInSpec PreProc
+ HiLink sudoersUserAliasInSpec PreProc
+ HiLink sudoersUserNameInRunas String
+ HiLink sudoersUIDInRunas Number
+ HiLink sudoersGroupInRunas PreProc
+ HiLink sudoersUserNetgroupInRunas PreProc
+ HiLink sudoersUserAliasInRunas PreProc
+ HiLink sudoersHostAlias Identifier
+ HiLink sudoersHostNameInList String
+ HiLink sudoersIPAddrInList Number
+ HiLink sudoersNetworkInList Number
+ HiLink sudoersHostNetgroupInList PreProc
+ HiLink sudoersHostAliasInList PreProc
+ HiLink sudoersHostName String
+ HiLink sudoersIPAddr Number
+ HiLink sudoersNetwork Number
+ HiLink sudoersHostNetgroup PreProc
+ HiLink sudoersHostAliasRef PreProc
+ HiLink sudoersHostNameInSpec String
+ HiLink sudoersIPAddrInSpec Number
+ HiLink sudoersNetworkInSpec Number
+ HiLink sudoersHostNetgroupInSpec PreProc
+ HiLink sudoersHostAliasInSpec PreProc
+ HiLink sudoersCmndAlias Identifier
+ HiLink sudoersCmndNameInList String
+ HiLink sudoersCmndAliasInList PreProc
+ HiLink sudoersCmndNameInSpec String
+ HiLink sudoersCmndAliasInSpec PreProc
+ HiLink sudoersUserAliasEquals Operator
+ HiLink sudoersUserListComma Delimiter
+ HiLink sudoersUserListColon Delimiter
+ HiLink sudoersUserSpecComma Delimiter
+ HiLink sudoersUserRunasBegin Delimiter
+ HiLink sudoersUserRunasComma Delimiter
+ HiLink sudoersUserRunasEnd Delimiter
+ HiLink sudoersHostAliasEquals Operator
+ HiLink sudoersHostListComma Delimiter
+ HiLink sudoersHostListColon Delimiter
+ HiLink sudoersHostSpecComma Delimiter
+ HiLink sudoersCmndAliasEquals Operator
+ HiLink sudoersCmndListComma Delimiter
+ HiLink sudoersCmndListColon Delimiter
+ HiLink sudoersCmndSpecComma Delimiter
+ HiLink sudoersCmndSpecColon Delimiter
+ HiLink sudoersUserNegationInList Operator
+ HiLink sudoersHostNegationInList Operator
+ HiLink sudoersCmndNegationInList Operator
+ HiLink sudoersUserNegation Operator
+ HiLink sudoersHostNegation Operator
+ HiLink sudoersUserNegationInSpec Operator
+ HiLink sudoersHostNegationInSpec Operator
+ HiLink sudoersUserNegationInRunas Operator
+ HiLink sudoersCmndNegationInSpec Operator
+ HiLink sudoersCommandArgs String
+ HiLink sudoersCommandEmpty Special
+ HiLink sudoersDefaultEntry Keyword
+ HiLink sudoersDefaultTypeAt Special
+ HiLink sudoersDefaultTypeColon Special
+ HiLink sudoersDefaultTypeGreaterThan Special
+ HiLink sudoersBooleanParameter Identifier
+ HiLink sudoersIntegerParameter Identifier
+ HiLink sudoersStringParameter Identifier
+ HiLink sudoersListParameter Identifier
+ HiLink sudoersParameterListComma Delimiter
+ HiLink sudoersIntegerParameterEquals Operator
+ HiLink sudoersStringParameterEquals Operator
+ HiLink sudoersListParameterEquals Operator
+ HiLink sudoersIntegerValue Number
+ HiLink sudoersStringValue String
+ HiLink sudoersListValue String
+ HiLink sudoersPASSWD Special
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "sudoers"
+
+" vim: set sts=2 sw=2: