create dynamic devfs ruleset from configured or default
This commit is contained in:
		
							
								
								
									
										53
									
								
								cmd/utils.go
									
									
									
									
									
								
							
							
						
						
									
										53
									
								
								cmd/utils.go
									
									
									
									
									
								
							@ -414,6 +414,59 @@ func getDatastoreFromArray(name string, dsa []Datastore) (*Datastore, error) {
 | 
				
			|||||||
	return &Datastore{}, errors.New("Datastore not found")
 | 
						return &Datastore{}, errors.New("Datastore not found")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func getDevfsRuleset(ruleset int) []string {
 | 
				
			||||||
 | 
						cmd := fmt.Sprintf("/sbin/devfs rule -s %d show", ruleset)
 | 
				
			||||||
 | 
						out, err := executeCommand(cmd)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return []string{}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						// Get rid of the last "\n"
 | 
				
			||||||
 | 
						return strings.Split(out, "\n")[:len(strings.Split(out, "\n"))-1]
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func copyDevfsRuleset(ruleset int, srcrs int) error {
 | 
				
			||||||
 | 
						// Resulting ruleset as an array of line
 | 
				
			||||||
 | 
						//var result []string
 | 
				
			||||||
 | 
						out := getDevfsRuleset(srcrs)
 | 
				
			||||||
 | 
						for _, line := range out {
 | 
				
			||||||
 | 
							//fields := strings.Fields(line)
 | 
				
			||||||
 | 
							cmd := fmt.Sprintf("/sbin/devfs rule -s %d add %s", ruleset, line)
 | 
				
			||||||
 | 
							out, err := executeCommand(cmd)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								return errors.New(fmt.Sprintf("Error adding rule \"%s\" to ruleset %d: %s", line, ruleset, out))
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/********************************************************************************
 | 
				
			||||||
 | 
					 * Add a rule to specified ruleset
 | 
				
			||||||
 | 
					 * Ex.: addDevfsRuleToRuleset("path bpf* unhide", 1002)
 | 
				
			||||||
 | 
					 *******************************************************************************/
 | 
				
			||||||
 | 
					func addDevfsRuleToRuleset(rule string, ruleset int) error {
 | 
				
			||||||
 | 
						// TODO: Check if rule not already enabled. We will need to recurse into includes.
 | 
				
			||||||
 | 
						// Get last rule index
 | 
				
			||||||
 | 
						rules := getDevfsRuleset(ruleset)
 | 
				
			||||||
 | 
						if len(rules) == 0 {
 | 
				
			||||||
 | 
							fmt.Printf("Error listing ruleset %d\n", ruleset)
 | 
				
			||||||
 | 
							return errors.New(fmt.Sprintf("Error listing rueset %d\n", ruleset))
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						f := strings.Fields(rules[(len(rules)-1)])
 | 
				
			||||||
 | 
						//fmt.Printf("Dernier index du ruleset %d: %s\n", ruleset, f[0])
 | 
				
			||||||
 | 
						index, _ := strconv.Atoi(f[0])
 | 
				
			||||||
 | 
						index += 100
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						cmd := fmt.Sprintf("/sbin/devfs rule -s %d add %d %s", ruleset, index, rule)
 | 
				
			||||||
 | 
						out, err := executeCommand(cmd)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return errors.New(fmt.Sprintf("Error adding rule \"%s\" to ruleset %d: %s", rule, ruleset, out))
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/******************************************************************************
 | 
					/******************************************************************************
 | 
				
			||||||
 * Return the quantity of jails with the name passed as parameter
 | 
					 * Return the quantity of jails with the name passed as parameter
 | 
				
			||||||
 *****************************************************************************/
 | 
					 *****************************************************************************/
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user