mirror of
https://github.com/docker/docker-credential-helpers.git
synced 2026-06-13 16:01:28 +05:30
implemented freeing memory in secretservice and made minor edits to osxkeychain
Signed-off-by: Avi Vaid <avaid1996@gmail.com>
This commit is contained in:
@@ -10,11 +10,11 @@ package osxkeychain
|
|||||||
import "C"
|
import "C"
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
|
"github.com/docker/docker-credential-helpers/credentials"
|
||||||
"net/url"
|
"net/url"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
"github.com/docker/docker-credential-helpers/credentials"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// errCredentialsNotFound is the specific error message returned by OS X
|
// errCredentialsNotFound is the specific error message returned by OS X
|
||||||
@@ -94,19 +94,19 @@ func (h Osxkeychain) Get(serverURL string) (string, string, error) {
|
|||||||
return user, pass, nil
|
return user, pass, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h Osxkeychain) List() ([]string, []string, error){
|
func (h Osxkeychain) List() ([]string, []string, error) {
|
||||||
var pathsC** C.char
|
var pathsC **C.char
|
||||||
defer C.free(unsafe.Pointer(pathsC))
|
defer C.free(unsafe.Pointer(pathsC))
|
||||||
var acctsC** C.char
|
var acctsC **C.char
|
||||||
defer C.free(unsafe.Pointer(acctsC))
|
defer C.free(unsafe.Pointer(acctsC))
|
||||||
var listLenC C.uint
|
var listLenC C.uint
|
||||||
errMsg := C.keychain_list(&pathsC, &acctsC, &listLenC)
|
errMsg := C.keychain_list(&pathsC, &acctsC, &listLenC)
|
||||||
if errMsg!=nil {
|
if errMsg != nil {
|
||||||
defer C.free(unsafe.Pointer(errMsg))
|
defer C.free(unsafe.Pointer(errMsg))
|
||||||
goMsg := C.GoString(errMsg)
|
goMsg := C.GoString(errMsg)
|
||||||
return nil, nil, errors.New(goMsg)
|
return nil, nil, errors.New(goMsg)
|
||||||
}
|
}
|
||||||
var listLen int;
|
var listLen int
|
||||||
listLen = int(listLenC)
|
listLen = int(listLenC)
|
||||||
pathTmp := (*[1 << 30]*C.char)(unsafe.Pointer(pathsC))[:listLen:listLen]
|
pathTmp := (*[1 << 30]*C.char)(unsafe.Pointer(pathsC))[:listLen:listLen]
|
||||||
acctTmp := (*[1 << 30]*C.char)(unsafe.Pointer(acctsC))[:listLen:listLen]
|
acctTmp := (*[1 << 30]*C.char)(unsafe.Pointer(acctsC))[:listLen:listLen]
|
||||||
@@ -114,8 +114,8 @@ func (h Osxkeychain) List() ([]string, []string, error){
|
|||||||
paths := make([]string, listLen)
|
paths := make([]string, listLen)
|
||||||
accts := make([]string, listLen)
|
accts := make([]string, listLen)
|
||||||
at := 0
|
at := 0
|
||||||
for i := 0; i < listLen ; i++ {
|
for i := 0; i < listLen; i++ {
|
||||||
if C.GoString(pathTmp[i])=="0" {
|
if C.GoString(pathTmp[i]) == "0" {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
paths[at] = C.GoString(pathTmp[i])
|
paths[at] = C.GoString(pathTmp[i])
|
||||||
@@ -124,9 +124,8 @@ func (h Osxkeychain) List() ([]string, []string, error){
|
|||||||
}
|
}
|
||||||
paths = paths[:at]
|
paths = paths[:at]
|
||||||
accts = accts[:at]
|
accts = accts[:at]
|
||||||
//still need to free all the memory we allocated in the c file
|
|
||||||
//do it here >>
|
|
||||||
C.freeListData(&pathsC, listLenC)
|
C.freeListData(&pathsC, listLenC)
|
||||||
|
C.freeListData(&acctsC, listLenC)
|
||||||
return paths, accts, nil
|
return paths, accts, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -164,4 +163,3 @@ func freeServer(s *C.struct_Server) {
|
|||||||
C.free(unsafe.Pointer(s.host))
|
C.free(unsafe.Pointer(s.host))
|
||||||
C.free(unsafe.Pointer(s.path))
|
C.free(unsafe.Pointer(s.path))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
#include "secretservice_linux.h"
|
#include "secretservice_linux.h"
|
||||||
|
|
||||||
const SecretSchema *docker_get_schema(void)
|
const SecretSchema *docker_get_schema(void)
|
||||||
@@ -137,3 +138,10 @@ GError *list(char *** paths, char *** accts, unsigned int *list_l) {
|
|||||||
*list_l = numKeys;
|
*list_l = numKeys;
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void freeListData(char *** data, unsigned int length) {
|
||||||
|
for(int i=0; i<length; i++) {
|
||||||
|
free((*data)[i]);
|
||||||
|
}
|
||||||
|
free(*data);
|
||||||
|
}
|
||||||
|
|||||||
@@ -99,5 +99,7 @@ func (h Secretservice) List() ([]string, []string, error) {
|
|||||||
paths[i] = C.GoString(pathTmp[i])
|
paths[i] = C.GoString(pathTmp[i])
|
||||||
accts[i] = C.GoString(acctTmp[i])
|
accts[i] = C.GoString(acctTmp[i])
|
||||||
}
|
}
|
||||||
|
C.freeListData(&pathsC, listLenC)
|
||||||
|
C.freeListData(&acctsC, listLenC)
|
||||||
return paths, accts, nil
|
return paths, accts, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,3 +10,4 @@ GError *add(char *server, char *username, char *secret);
|
|||||||
GError *delete(char *server);
|
GError *delete(char *server);
|
||||||
GError *get(char *server, char **username, char **secret);
|
GError *get(char *server, char **username, char **secret);
|
||||||
GError *list(char *** paths, char *** accts, unsigned int *list_l);
|
GError *list(char *** paths, char *** accts, unsigned int *list_l);
|
||||||
|
void freeListData(char *** data, unsigned int length);
|
||||||
|
|||||||
Reference in New Issue
Block a user