1042
1050
talloc_free(attr_tmp[0]);
1044
1052
retval = GetProfileAttr(&profile, "EmailAddress", &count, &attr_tmp);
1045
OPENCHANGE_RETVAL_IF(retval || !count, MAPI_E_NOT_FOUND, mem_ctx);
1046
EmailAddress = talloc_strdup(mem_ctx, attr_tmp[0]);
1053
OPENCHANGE_RETVAL_IF(retval, MAPI_E_NOT_FOUND, mem_ctx);
1054
oldEmailAddress = talloc_strdup(mem_ctx, attr_tmp[0]);
1047
1055
talloc_free(attr_tmp[0]);
1049
1057
retval = GetProfileAttr(&profile, "ProxyAddress", &count, &attr_tmp);
1054
1062
/* Change EmailAddress */
1059
for (i = strlen(EmailAddress); i > 0; i--) {
1060
if (EmailAddress[i] == '=') {
1061
tmp = talloc_strndup(mem_ctx, EmailAddress, i + 1);
1065
OPENCHANGE_RETVAL_IF(!tmp, MAPI_E_INVALID_PARAMETER, mem_ctx);
1067
attr = talloc_asprintf(mem_ctx, "%s%s", tmp, username);
1069
mapi_profile_modify_string_attr(mapi_ctx, profile_dst, "EmailAddress", attr);
1064
enum MAPISTATUS retval;
1065
struct nspi_context *nspi;
1066
struct SPropTagArray *SPropTagArray = NULL;
1067
struct SRowSet *SRowSet;
1068
struct Restriction_r Filter;
1069
struct SPropValue *lpProp = NULL;
1070
struct PropertyTagArray_r *MIds = NULL;
1073
struct mapi_session *session = NULL;
1075
retval = GetProfileAttr(&profile, "password", &count, &attr_tmp);
1076
OPENCHANGE_RETVAL_IF(retval || !count, MAPI_E_NOT_FOUND, mem_ctx);
1077
password = talloc_strdup(mem_ctx, attr_tmp[0]);
1078
talloc_free(attr_tmp[0]);
1080
retval = MapiLogonProvider(mapi_ctx, &session, profile_dst, password, PROVIDER_ID_NSPI);
1081
if (retval != MAPI_E_SUCCESS) {
1082
mapi_errstr("DuplicateProfile", GetLastError());
1085
mapi_ctx = session->mapi_ctx;
1087
OPENCHANGE_RETVAL_IF(!session, MAPI_E_NOT_INITIALIZED, NULL);
1088
OPENCHANGE_RETVAL_IF(!session->nspi->ctx, MAPI_E_END_OF_SESSION, NULL);
1089
OPENCHANGE_RETVAL_IF(!session->mapi_ctx, MAPI_E_NOT_INITIALIZED, NULL);
1091
mem_ctx = talloc_named(NULL, 0, "ProcessNetworkProfile");
1092
nspi = (struct nspi_context *) session->nspi->ctx;
1095
SRowSet = talloc_zero(mem_ctx, struct SRowSet);
1096
retval = nspi_GetSpecialTable(nspi, mem_ctx, 0x0, &SRowSet);
1097
MAPIFreeBuffer(SRowSet);
1098
OPENCHANGE_RETVAL_IF(retval, retval, mem_ctx);
1100
SPropTagArray = set_SPropTagArray(mem_ctx, 0x1,
1104
/* Retrieve the username to match */
1106
username = cli_credentials_get_username(nspi->cred);
1107
OPENCHANGE_RETVAL_IF(!username, MAPI_E_INVALID_PARAMETER, mem_ctx);
1110
/* Build the restriction we want for NspiGetMatches */
1111
lpProp = talloc_zero(mem_ctx, struct SPropValue);
1112
lpProp->ulPropTag = PR_ANR_UNICODE;
1113
lpProp->dwAlignPad = 0;
1114
lpProp->value.lpszW = username;
1116
Filter.rt = (enum RestrictionType_r)RES_PROPERTY;
1117
Filter.res.resProperty.relop = RES_PROPERTY;
1118
Filter.res.resProperty.ulPropTag = PR_ANR_UNICODE;
1119
Filter.res.resProperty.lpProp = lpProp;
1121
SRowSet = talloc_zero(mem_ctx, struct SRowSet);
1122
MIds = talloc_zero(mem_ctx, struct PropertyTagArray_r);
1123
retval = nspi_GetMatches(nspi, mem_ctx, SPropTagArray, &Filter, 5000, &SRowSet, &MIds);
1124
MAPIFreeBuffer(SPropTagArray);
1125
MAPIFreeBuffer(lpProp);
1126
if (retval != MAPI_E_SUCCESS) {
1127
MAPIFreeBuffer(MIds);
1128
MAPIFreeBuffer(SRowSet);
1129
talloc_free(mem_ctx);
1133
/* if there's no match */
1134
OPENCHANGE_RETVAL_IF(!SRowSet, MAPI_E_NOT_FOUND, mem_ctx);
1135
OPENCHANGE_RETVAL_IF(!SRowSet->cRows, MAPI_E_NOT_FOUND, mem_ctx);
1136
OPENCHANGE_RETVAL_IF(!MIds, MAPI_E_NOT_FOUND, mem_ctx);
1137
MAPIFreeBuffer(MIds);
1139
set_profile_attribute(mapi_ctx, profile_dst, *SRowSet, index, PR_EMAIL_ADDRESS, "EmailAddress");
1140
mapi_profile_delete_string_attr(mapi_ctx, profile_dst, "EmailAddress", oldEmailAddress);
1141
MAPIFreeBuffer(SRowSet);
1073
1144
/* Change ProxyAddress */
1448
1519
basedn = ldb_dn_new(ldb_ctx, ldb_ctx, "CN=Profiles");
1450
1521
ret = ldb_search(ldb_ctx, mem_ctx, &res, basedn, LDB_SCOPE_SUBTREE, attrs, "(CN=%s)", profile->profname);
1451
OPENCHANGE_RETVAL_IF(ret != LDB_SUCCESS, MAPI_E_NOT_FOUND, NULL);
1452
OPENCHANGE_RETVAL_IF(!res->count, MAPI_E_NOT_FOUND, NULL);
1522
OPENCHANGE_RETVAL_IF(ret != LDB_SUCCESS, MAPI_E_NOT_FOUND, res);
1523
OPENCHANGE_RETVAL_IF(!res->count, MAPI_E_NOT_FOUND, res);
1454
1525
msg = res->msgs[0];
1455
1526
ldb_element = ldb_msg_find_element(msg, attribute);
1456
OPENCHANGE_RETVAL_IF(!ldb_element, MAPI_E_NOT_FOUND, NULL);
1527
OPENCHANGE_RETVAL_IF(!ldb_element, MAPI_E_NOT_FOUND, res);
1458
1529
val.data = (uint8_t *)talloc_strdup(mem_ctx, value);
1459
1530
val.length = strlen(value);
1460
OPENCHANGE_RETVAL_IF(!ldb_msg_find_val(ldb_element, &val), MAPI_E_NOT_FOUND, NULL);
1531
OPENCHANGE_RETVAL_IF(!ldb_msg_find_val(ldb_element, &val), MAPI_E_NOT_FOUND, res);
1462
1534
return MAPI_E_SUCCESS;