hpkg format: Add attributes for declaring users and groups
This commit is contained in:
@@ -0,0 +1 @@
|
||||
#include <../os/package/User.h>
|
||||
@@ -18,6 +18,7 @@
|
||||
#include <package/PackageResolvable.h>
|
||||
#include <package/PackageResolvableExpression.h>
|
||||
#include <package/PackageVersion.h>
|
||||
#include <package/User.h>
|
||||
#include <package/UserSettingsFileInfo.h>
|
||||
|
||||
|
||||
@@ -86,6 +87,9 @@ public:
|
||||
const BObjectList<BUserSettingsFileInfo>&
|
||||
UserSettingsFileInfos() const;
|
||||
|
||||
const BObjectList<BUser>& Users() const;
|
||||
const BStringList& Groups() const;
|
||||
|
||||
const BObjectList<BPackageResolvable>& ProvidesList() const;
|
||||
const BObjectList<BPackageResolvableExpression>&
|
||||
RequiresList() const;
|
||||
@@ -135,6 +139,12 @@ public:
|
||||
status_t AddUserSettingsFileInfo(
|
||||
const BUserSettingsFileInfo& info);
|
||||
|
||||
void ClearUsers();
|
||||
status_t AddUser(const BUser& user);
|
||||
|
||||
void ClearGroups();
|
||||
status_t AddGroup(const BString& group);
|
||||
|
||||
void ClearProvidesList();
|
||||
status_t AddProvides(const BPackageResolvable& provides);
|
||||
|
||||
@@ -196,6 +206,8 @@ private:
|
||||
typedef BObjectList<BUserSettingsFileInfo>
|
||||
UserSettingsFileInfoList;
|
||||
|
||||
typedef BObjectList<BUser> UserList;
|
||||
|
||||
private:
|
||||
status_t _ReadFromPackageFile(
|
||||
const PackageFileLocation& fileLocation);
|
||||
@@ -218,6 +230,8 @@ private:
|
||||
const char* field,
|
||||
const UserSettingsFileInfoList&
|
||||
infos);
|
||||
static status_t _AddUsers(BMessage* archive, const char* field,
|
||||
const UserList& users);
|
||||
|
||||
static status_t _ExtractVersion(BMessage* archive,
|
||||
const char* field, int32 index,
|
||||
@@ -236,6 +250,8 @@ private:
|
||||
static status_t _ExtractUserSettingsFileInfos(
|
||||
BMessage* archive, const char* field,
|
||||
UserSettingsFileInfoList& _infos);
|
||||
static status_t _ExtractUsers(BMessage* archive,
|
||||
const char* field, UserList& _users);
|
||||
|
||||
private:
|
||||
BString fName;
|
||||
@@ -259,6 +275,9 @@ private:
|
||||
BObjectList<BGlobalSettingsFileInfo> fGlobalSettingsFileInfos;
|
||||
BObjectList<BUserSettingsFileInfo> fUserSettingsFileInfos;
|
||||
|
||||
UserList fUsers;
|
||||
BStringList fGroups;
|
||||
|
||||
ResolvableList fProvidesList;
|
||||
|
||||
ResolvableExpressionList fRequiresList;
|
||||
|
||||
@@ -45,6 +45,10 @@ enum BPackageInfoAttributeID {
|
||||
// list of global settings file infos
|
||||
B_PACKAGE_INFO_USER_SETTINGS_FILES,
|
||||
// list of user settings file infos
|
||||
B_PACKAGE_INFO_USERS,
|
||||
// list of (Unix) users defined/needed
|
||||
B_PACKAGE_INFO_GROUPS,
|
||||
// list of (Unix) groups defined/needed
|
||||
//
|
||||
B_PACKAGE_INFO_ENUM_COUNT,
|
||||
};
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
/*
|
||||
* Copyright 2013, Haiku, Inc.
|
||||
* Distributed under the terms of the MIT License.
|
||||
*/
|
||||
#ifndef _PACKAGE__USER_H_
|
||||
#define _PACKAGE__USER_H_
|
||||
|
||||
|
||||
#include <String.h>
|
||||
#include <StringList.h>
|
||||
|
||||
|
||||
namespace BPackageKit {
|
||||
|
||||
|
||||
class BUser {
|
||||
public:
|
||||
BUser();
|
||||
BUser(const BString& name,
|
||||
const BString& realName,
|
||||
const BString& home, const BString& shell,
|
||||
const BStringList& groups);
|
||||
~BUser();
|
||||
|
||||
status_t InitCheck() const;
|
||||
|
||||
const BString& Name() const;
|
||||
const BString& RealName() const;
|
||||
const BString& Home() const;
|
||||
const BString& Shell() const;
|
||||
const BStringList& Groups() const;
|
||||
|
||||
status_t SetTo(const BString& name,
|
||||
const BString& realName,
|
||||
const BString& home, const BString& shell,
|
||||
const BStringList& groups);
|
||||
|
||||
static bool IsValidUserName(const char* name);
|
||||
|
||||
private:
|
||||
BString fName;
|
||||
BString fRealName;
|
||||
BString fHome;
|
||||
BString fShell;
|
||||
BStringList fGroups;
|
||||
};
|
||||
|
||||
|
||||
} // namespace BPackageKit
|
||||
|
||||
|
||||
#endif // _PACKAGE__USER_H_
|
||||
@@ -70,3 +70,10 @@ B_DEFINE_HPKG_ATTRIBUTE(44, UINT, "package:settings-file-update-type",
|
||||
PACKAGE_SETTINGS_FILE_UPDATE_TYPE)
|
||||
B_DEFINE_HPKG_ATTRIBUTE(45, STRING, "package:settings-file-template",
|
||||
PACKAGE_SETTINGS_FILE_TEMPLATE)
|
||||
B_DEFINE_HPKG_ATTRIBUTE(46, STRING, "package:user", PACKAGE_USER)
|
||||
B_DEFINE_HPKG_ATTRIBUTE(47, STRING, "package:user.real-name",
|
||||
PACKAGE_USER_REAL_NAME)
|
||||
B_DEFINE_HPKG_ATTRIBUTE(48, STRING, "package:user.home", PACKAGE_USER_HOME)
|
||||
B_DEFINE_HPKG_ATTRIBUTE(49, STRING, "package:user.shell", PACKAGE_USER_SHELL)
|
||||
B_DEFINE_HPKG_ATTRIBUTE(50, STRING, "package:user.group", PACKAGE_USER_GROUP)
|
||||
B_DEFINE_HPKG_ATTRIBUTE(51, STRING, "package:group", PACKAGE_GROUP)
|
||||
|
||||
@@ -59,6 +59,16 @@ struct BUserSettingsFileInfoData {
|
||||
};
|
||||
|
||||
|
||||
struct BUserData {
|
||||
const char* name;
|
||||
const char* realName;
|
||||
const char* home;
|
||||
const char* shell;
|
||||
const char* const* groups;
|
||||
size_t groupCount;
|
||||
};
|
||||
|
||||
|
||||
struct BPackageInfoAttributeValue {
|
||||
union {
|
||||
uint64 unsignedInt;
|
||||
@@ -68,6 +78,7 @@ struct BPackageInfoAttributeValue {
|
||||
BPackageResolvableExpressionData resolvableExpression;
|
||||
BGlobalSettingsFileInfoData globalSettingsFileInfo;
|
||||
BUserSettingsFileInfoData userSettingsFileInfo;
|
||||
BUserData user;
|
||||
};
|
||||
BPackageInfoAttributeID attributeID;
|
||||
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
#include <ByteOrder.h>
|
||||
#include <SupportDefs.h>
|
||||
|
||||
#include <Array.h>
|
||||
#include <util/SinglyLinkedList.h>
|
||||
|
||||
#include <package/hpkg/ErrorOutput.h>
|
||||
@@ -103,6 +104,7 @@ protected:
|
||||
class PackageResolvableExpressionAttributeHandler;
|
||||
class GlobalSettingsFileInfoAttributeHandler;
|
||||
class UserSettingsFileInfoAttributeHandler;
|
||||
class UserAttributeHandler;
|
||||
class PackageAttributeHandler;
|
||||
class LowLevelAttributeHandler;
|
||||
|
||||
@@ -344,6 +346,25 @@ public:
|
||||
};
|
||||
|
||||
|
||||
class ReaderImplBase::UserAttributeHandler
|
||||
: public PackageInfoAttributeHandlerBase {
|
||||
public:
|
||||
UserAttributeHandler(
|
||||
BPackageInfoAttributeValue&
|
||||
packageInfoValue);
|
||||
|
||||
virtual status_t HandleAttribute(
|
||||
AttributeHandlerContext* context, uint8 id,
|
||||
const AttributeValue& value,
|
||||
AttributeHandler** _handler);
|
||||
|
||||
virtual status_t Delete(AttributeHandlerContext* context);
|
||||
|
||||
private:
|
||||
Array<const char*> fGroups;
|
||||
};
|
||||
|
||||
|
||||
class ReaderImplBase::PackageAttributeHandler : public AttributeHandler {
|
||||
public:
|
||||
virtual status_t HandleAttribute(
|
||||
|
||||
@@ -163,6 +163,12 @@ private:
|
||||
= B_HPKG_ATTRIBUTE_ID_PACKAGE_VERSION_MAJOR;
|
||||
|
||||
private:
|
||||
PackageAttribute* _AddStringAttribute(BHPKGAttributeID id,
|
||||
const BString& value,
|
||||
DoublyLinkedList<PackageAttribute>& list);
|
||||
inline PackageAttribute* _AddStringAttributeIfNotEmpty(
|
||||
BHPKGAttributeID id, const BString& value,
|
||||
DoublyLinkedList<PackageAttribute>& list);
|
||||
void _WritePackageAttributes(
|
||||
const PackageAttributeList& attributes);
|
||||
|
||||
@@ -252,6 +258,16 @@ WriterImplBase::SetFinished(bool finished)
|
||||
}
|
||||
|
||||
|
||||
inline WriterImplBase::PackageAttribute*
|
||||
WriterImplBase::_AddStringAttributeIfNotEmpty(BHPKGAttributeID id,
|
||||
const BString& value, DoublyLinkedList<PackageAttribute>& list)
|
||||
{
|
||||
if (value.IsEmpty())
|
||||
return NULL;
|
||||
return _AddStringAttribute(id, value, list);
|
||||
}
|
||||
|
||||
|
||||
} // namespace BPrivate
|
||||
|
||||
} // namespace BHPKG
|
||||
|
||||
Reference in New Issue
Block a user