#------------------------------------------------------------------------------- # Sample p4broker configuration file # # The following paragraphs illustrate the configuration of the Perforce # Broker by example. Change the values and configuration to suit your # environment and requirements. # # Note that by default this broker will simply allow all commands to pass # through, and be executed against the target server. Uncomment and edit # the examples below to get started. #------------------------------------------------------------------------------- target = localhost:1666; listen = 2666; zeroconf = false; server-name = "CBD Broker"; server-desc = "CBD Broker"; directory = /home/rdefauw/P4Servers/b.2666; logfile = broker.log; debug-level = server=1; admin-name = "Perforce Admins"; admin-phone = 999/911; admin-email = perforce-admins@example.com; # Optional user account to authenticate the broker to the target server with. #service-user = "svc-user-broker"; # Optional alternate P4TICKETS location. #ticket-file = "/home/perforce/p4-broker/.p4tickets"; # # Redirection mode. Pedantic redirection always redirects when instructed # to do so. Selective redirection permits redirection within a session # until a command has been executed against the target server. Selective # redirection is the default as it gives GUI users a better experience # when replication delays might otherwise cause incorrect results to be # returned. # redirection = selective; #redirection = pedantic; #------------------------------------------------------------------------------- # Definitions of all altservers in the environment. #------------------------------------------------------------------------------- # Note that the altserver name can not be 'random' as that is reserved for use # in the destination field of command handlers to specify that the altserver # should be chosen randomly. # #altserver: replica_name #{ # # # # Address of target server. Note that target servers must be configured # # to use P4AUTH to ensure that login tickets are valid for all servers in # # the brokered environment. I.e. the target and alternate servers must # # share their authentication. # # # target = localhost:1669; #} #------------------------------------------------------------------------------- # Command policies #------------------------------------------------------------------------------- # # The general syntax is: # # command: # { # # Conditions for the command to meet (optional) # # Note that with the exception of 'flags', these are regex patterns. # flags = ; # args = ; # user = ; # workspace = ; # prog = ; # version = ; # # # What to do with matching commands (required) # action = pass | reject | redirect | filter ; # # # How to go about it # destination = ; # Required for action = redirect # execute = ; # Required for action = filter # message = ; # Required for action = reject #} # # Note that when specifying regex patterns, bare strings like 'integ' will also # match 'integrate'. To match an exact string, append the beginning/end of line # anchors. E.g. '^integ$'. # ## # Workspace creation # Args: # 1. Configuration # 2. Workspace name ## command: wscreate { action = filter; execute = "./scripts/wscreate.sh"; } ## # Workspace switching # Args: # 1. Configuration # 2. Workspace name ## command: wsswitch { action = filter; execute = "./scripts/wsswitch.sh"; } ## # Configuration adding # Args: # 1. Configuration name # 2. Configuration XML data ## command: submit { flags = -A; action = filter; execute = "./scripts/cfgadd.sh"; } ## # Configuration updating # Args: # 1. Configuration depot path # 2. Configuration XML data ## command: submit { flags = -Q; action = filter; execute = "./scripts/cfgupdate.sh"; } ## # Configuration deleting # Args: # 1. Configuration depot path ## command: submit { flags = -Z; action = filter; execute = "./scripts/cfgdelete.sh"; } ## # filter unshelve ## command: unshelve { action = filter; execute = "./scripts/wsunshelve.sh"; } ## # filter reconcile/status ## command: reconcile { action = filter; execute = "./scripts/wsreconcile.sh"; } command: status { action = filter; execute = "./scripts/wsreconcile.sh"; } ## # filter sync/update ## command: sync { action = filter; execute = "./scripts/wssync.sh"; } command: update { action = filter; execute = "./scripts/wssync.sh"; } command: flush { action = filter; execute = "./scripts/wssync.sh"; } ## # check access policies on add/edit/delete ## command: edit { action = filter; execute = "./scripts/wsedit.sh"; } command: add { action = filter; execute = "./scripts/wsadd.sh"; } command: delete { action = filter; execute = "./scripts/wsdelete.sh"; } ## # check acess policies on merge operations # (those that take branch spec arguments) ## command: merge { flags = -b; action = filter; execute = "./scripts/wsmerge.sh"; } command: copy { flags = -b; action = filter; execute = "./scripts/wsmerge.sh"; } command: integ { flags = -b; action = filter; execute = "./scripts/wsmerge.sh"; } command: populate { flags = -b; action = filter; execute = "./scripts/wsmerge.sh"; } ## # check acess policies on merge operations # (those that take source/target pairs) ## command: merge { action = filter; execute = "./scripts/wsmerge.sh"; } command: copy { action = filter; execute = "./scripts/wsmerge.sh"; } command: integ { action = filter; execute = "./scripts/wsmerge.sh"; } command: move { action = filter; execute = "./scripts/wsmerge.sh"; } command: populate { action = filter; execute = "./scripts/wsmerge.sh"; } command: rename { action = filter; execute = "./scripts/wsmerge.sh"; } ## # check acess policies on submit ## command: submit { action = filter; execute = "./scripts/wssubmit.sh"; } # Uncomment the lines below to block all access to the server during # periods of maintenance. # #command: .* #{ # action = reject; # message = "Server down for maintenance. Back soon"; #} # # Allow user 'tony' to run 'p4 opened -a'. # #command: opened #{ # flags = -a; # user = tony; # action = pass; #} # # Forbid the use of 'p4 opened -a' to everyone else. # #command: opened #{ # flags = -a; # action = reject; # message = "You don't need to know that"; #} # # Use of the 'p4 changes' command is filtered. The script might decide # that requests for information about older changes can be served by # an alternate server. # #command: changes #{ # action = filter; # execute = ./check_changes.rb; #} # # Redirect all 'p4 users' commands to another server. Not a very useful # example; good cases for wholesale redirection are hard to come by and # great care should be exercised when using this action. # #command: users #{ # action = redirect; # destination = replica; #} # When the destination is 'random', the altserver is chosen arbitrarily. # #command: fixes #{ # action = redirect; # destination = random; #} # # Only allow users named "super-something" to run 'p4 protect' or 'p4 admin'. # #command: admin|protect #{ # user = ^super-; # action = pass; #} # #command: admin|protect #{ # action = reject; # message = "permission denied."; #} # # Reject programs that don't identify themselves. # #command: .* #{ # prog = ^$|unknown; # action = reject; # message = "Unnamed programs disallowed. API programs can call SetProg()."; #} # # Prevent commands against //... and //depot/... # #command: .* #{ # args = ^//[^/]*/?\.\.\.; # action = reject; # message = "Some commands just want to watch the database churn."; #}