Skip to content

Commit

Permalink
Merge pull request #1424 from C-Sto/extensionargs
Browse files Browse the repository at this point in the history
Extensionargs
  • Loading branch information
rkervella authored Dec 21, 2023
2 parents 478dabf + dfaadfb commit a84f13e
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 8 deletions.
37 changes: 29 additions & 8 deletions client/command/extensions/load.go
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,7 @@ func LoadExtensionManifest(manifestPath string) (*ExtensionManifest, error) {
loadedManifests[manifest.Name] = manifest

return manifest, nil

}

func convertOldManifest(old *ExtensionManifest_) *ExtensionManifest {
Expand Down Expand Up @@ -487,8 +488,17 @@ func runExtensionCmd(cmd *cobra.Command, con *console.SliverConsoleClient, args
entryPoint = loadedExtensions[extName].Entrypoint // should exist at this point
} else {
// Regular DLL
extArgs := strings.Join(args, " ")
extensionArgs = []byte(extArgs)
// extArgs := strings.Join(args, " ")
//legacy case - single string arg
if len(ext.Arguments) == 1 && ext.Arguments[0].Type == "string" {
extensionArgs = []byte(strings.Join(args, " "))
} else {
extensionArgs, err = getExtArgs(cmd, args, binPath, ext)
if err != nil {
con.PrintErrorf("ext args error: %s\n", err)
return
}
}
extName = ext.CommandName
entryPoint = ext.Entrypoint
}
Expand Down Expand Up @@ -540,12 +550,8 @@ func PrintExtOutput(extName string, commandName string, callExtension *sliverpb.
}
}

func getBOFArgs(cmd *cobra.Command, args []string, binPath string, ext *ExtCommand) ([]byte, error) {
var extensionArgs []byte
binData, err := os.ReadFile(binPath)
if err != nil {
return nil, err
}
func getExtArgs(cmd *cobra.Command, args []string, binPath string, ext *ExtCommand) ([]byte, error) {
var err error
argsBuffer := core.BOFArgsBuffer{
Buffer: new(bytes.Buffer),
}
Expand Down Expand Up @@ -622,6 +628,17 @@ func getBOFArgs(cmd *cobra.Command, args []string, binPath string, ext *ExtComma
if err != nil {
return nil, err
}

return parsedArgs, nil
}

func getBOFArgs(cmd *cobra.Command, args []string, binPath string, ext *ExtCommand) ([]byte, error) {
var extensionArgs []byte
binData, err := os.ReadFile(binPath)
if err != nil {
return nil, err
}

// Now build the extension's argument buffer
extensionArgsBuffer := core.BOFArgsBuffer{
Buffer: new(bytes.Buffer),
Expand All @@ -634,6 +651,10 @@ func getBOFArgs(cmd *cobra.Command, args []string, binPath string, ext *ExtComma
if err != nil {
return nil, err
}
parsedArgs, err := getExtArgs(cmd, args, binPath, ext)
if err != nil {
return nil, err
}
err = extensionArgsBuffer.AddData(parsedArgs)
if err != nil {
return nil, err
Expand Down
1 change: 1 addition & 0 deletions client/command/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,7 @@ func ServerCommands(con *client.SliverConsoleClient, serverCmds func() []*cobra.
}
server.AddCommand(extCmd)


/*
parking 'load' for now - the difference between 'load' and 'install' is that 'load' should not move binaries and manifests to the client install dir.
Maybe we can revisit this if it's required - but the usecase I can think of is when developing extensions, and that will also occasionally require a manifest update
Expand Down

0 comments on commit a84f13e

Please sign in to comment.