Skip to content

Commit f9b966d

Browse files
committed
If password option is no_password, do not insert an empty string password into inputs, and don't return encrypted password data.
1 parent dcfff92 commit f9b966d

File tree

3 files changed

+30
-23
lines changed

3 files changed

+30
-23
lines changed

pkg/bsql/helpers_test.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -341,17 +341,19 @@ func TestGenerateCredentials(t *testing.T) {
341341

342342
require.NoError(t, err)
343343
if tt.expectNonEmpty {
344-
require.NotEmpty(t, password)
344+
require.NotNil(t, password)
345+
require.NotEmpty(t, *password)
345346
// Verify the password length matches the requested length
346347
if tt.credentialOptions.GetRandomPassword() != nil {
347348
expectedLength := tt.credentialOptions.GetRandomPassword().GetLength()
348349
if expectedLength > 0 {
349-
require.Equal(t, int(expectedLength), len(password), "Password length should match requested length")
350+
require.Equal(t, int(expectedLength), len(*password), "Password length should match requested length")
350351
}
351352
}
352353
}
353354
if tt.expectedValue != "" {
354-
require.Equal(t, tt.expectedValue, password)
355+
require.NotNil(t, password)
356+
require.Equal(t, tt.expectedValue, *password)
355357
}
356358
})
357359
}

pkg/bsql/provisioning.go

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -243,14 +243,16 @@ func (s *SQLSyncer) prepareQueryInputs(
243243
if err != nil {
244244
return nil, nil, err
245245
}
246-
queryInputs["password"] = password
247-
credentials["password"] = password
248-
// Create plaintext data for return
249-
passwordData := &v2.PlaintextData{
250-
Name: "password",
251-
Bytes: []byte(password),
246+
if password != nil {
247+
queryInputs["password"] = password
248+
credentials["password"] = password
249+
// Create plaintext data for return
250+
passwordData := &v2.PlaintextData{
251+
Name: "password",
252+
Bytes: []byte(*password),
253+
}
254+
plaintextDataList = append(plaintextDataList, passwordData)
252255
}
253-
plaintextDataList = append(plaintextDataList, passwordData)
254256
}
255257

256258
// 3. Add namespaced access for advanced CEL expressions
@@ -269,26 +271,27 @@ func (s *SQLSyncer) prepareQueryInputs(
269271
return queryInputs, plaintextDataList, nil
270272
}
271273

272-
func generatePassword(ctx context.Context, credentialOptions *v2.LocalCredentialOptions) (string, error) {
274+
func generatePassword(ctx context.Context, credentialOptions *v2.LocalCredentialOptions) (*string, error) {
273275
if credentialOptions == nil {
274-
return "", errors.New("credential options are required")
276+
return nil, errors.New("credential options are required")
275277
}
276278

277279
var password string
278280
var err error
279281
switch credentialOptions.Options.(type) {
280282
case *v2.LocalCredentialOptions_NoPassword_:
283+
return nil, nil
281284
case *v2.LocalCredentialOptions_RandomPassword_, *v2.LocalCredentialOptions_PlaintextPassword_:
282285
password, err = crypto.GeneratePassword(ctx, credentialOptions)
283286
if err != nil {
284-
return "", fmt.Errorf("failed to generate password: %w", err)
287+
return nil, fmt.Errorf("failed to generate password: %w", err)
285288
}
286289

287290
default:
288-
return "", fmt.Errorf("unsupported credential options: %v", credentialOptions)
291+
return nil, fmt.Errorf("unsupported credential options: %v", credentialOptions)
289292
}
290293

291-
return password, nil
294+
return &password, nil
292295
}
293296

294297
// validateAccountInfo validates that the required account information is provided.

pkg/bsql/user_syncer.go

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -174,14 +174,16 @@ func (s *userSyncer) Rotate(ctx context.Context, resourceId *v2.ResourceId, cred
174174
if err != nil {
175175
return nil, nil, err
176176
}
177-
queryInputs["password"] = password
178-
credentials["password"] = password
179-
// Create plaintext data for return
180-
passwordData := &v2.PlaintextData{
181-
Name: "password",
182-
Bytes: []byte(password),
183-
}
184-
plaintextDataList = append(plaintextDataList, passwordData)
177+
if password != nil {
178+
queryInputs["password"] = password
179+
credentials["password"] = password
180+
// Create plaintext data for return
181+
passwordData := &v2.PlaintextData{
182+
Name: "password",
183+
Bytes: []byte(*password),
184+
}
185+
plaintextDataList = append(plaintextDataList, passwordData)
186+
}
185187

186188
// Execute account creation queries
187189
useTransaction := !rotationConfig.Update.NoTransaction

0 commit comments

Comments
 (0)