
- in io_watch_have_data(), ensure that we handle incomplete lines that don't yet have a newline by waiting for more data. That means, if the current content of the in_buffer does not have a newline, we wait longer. - in io_watch_have_data(), implement (and ignore) certain commands instead of failing the request. - in io_watch_have_data(), no longer g_compress() the entire line. "polkitagenthelper-pam.c" never backslash escapes the command, it only escapes the arguments. Of course, there should be no difference in practice, except that we don't want to handle escape sequences in the commands. - in io_watch_have_data(), compare SUCCESS/FAILURE literally. "polkitagenthelper-pam.c" never appends any trailing garbage to these commands, and we shouldn't handle that (although "polkitagentsession.c" does). - when io_watch_have_data() completes with success, we cannot destroy AuthRequest right away. It probably still has data pending that we first need to write to the polkit helper. Wait longer, and let io_watch_can_write() complete the request. - ensure we always answer the GDBusMethodInvocation. Otherwise, it gets leaked. - use NMStrBuf instead of GString.
59 lines
2.0 KiB
C
59 lines
2.0 KiB
C
// SPDX-License-Identifier: LGPL-2.1+
|
|
/*
|
|
* Copyright (C) 2018 Red Hat, Inc.
|
|
*/
|
|
|
|
#ifndef __NM_IO_UTILS_H__
|
|
#define __NM_IO_UTILS_H__
|
|
|
|
#include "nm-macros-internal.h"
|
|
|
|
/*****************************************************************************/
|
|
|
|
/**
|
|
* NMUtilsFileGetContentsFlags:
|
|
* @NM_UTILS_FILE_GET_CONTENTS_FLAG_NONE: no flag
|
|
* @NM_UTILS_FILE_GET_CONTENTS_FLAG_SECRET: if present, ensure that no
|
|
* data is left in memory. Essentially, it means to call explicity_bzero()
|
|
* to not leave key material on the heap (when reading secrets).
|
|
*/
|
|
typedef enum {
|
|
NM_UTILS_FILE_GET_CONTENTS_FLAG_NONE = 0,
|
|
NM_UTILS_FILE_GET_CONTENTS_FLAG_SECRET = (1 << 0),
|
|
} NMUtilsFileGetContentsFlags;
|
|
|
|
gboolean nm_utils_fd_get_contents (int fd,
|
|
gboolean close_fd,
|
|
gsize max_length,
|
|
NMUtilsFileGetContentsFlags flags,
|
|
char **contents,
|
|
gsize *length,
|
|
int *out_errsv,
|
|
GError **error);
|
|
|
|
gboolean nm_utils_file_get_contents (int dirfd,
|
|
const char *filename,
|
|
gsize max_length,
|
|
NMUtilsFileGetContentsFlags flags,
|
|
char **contents,
|
|
gsize *length,
|
|
int *out_errsv,
|
|
GError **error);
|
|
|
|
gboolean nm_utils_file_set_contents (const char *filename,
|
|
const char *contents,
|
|
gssize length,
|
|
mode_t mode,
|
|
int *out_errsv,
|
|
GError **error);
|
|
|
|
struct _NMStrBuf;
|
|
|
|
gssize nm_utils_fd_read (int fd, struct _NMStrBuf *out_string);
|
|
|
|
struct stat;
|
|
|
|
int nm_utils_file_stat (const char *filename, struct stat *out_st);
|
|
|
|
#endif /* __NM_IO_UTILS_H__ */
|